1This is gcc.info, produced by makeinfo version 5.2 from gcc.texi.
2
3Copyright (C) 1988-2013 Free Software Foundation, Inc.
4
5 Permission is granted to copy, distribute and/or modify this document
6under the terms of the GNU Free Documentation License, Version 1.3 or
7any later version published by the Free Software Foundation; with the
8Invariant Sections being "Funding Free Software", the Front-Cover Texts
9being (a) (see below), and with the Back-Cover Texts being (b) (see
10below).  A copy of the license is included in the section entitled "GNU
11Free Documentation License".
12
13 (a) The FSF's Front-Cover Text is:
14
15 A GNU Manual
16
17 (b) The FSF's Back-Cover Text is:
18
19 You have freedom to copy and modify this GNU Manual, like GNU software.
20Copies published by the Free Software Foundation raise funds for GNU
21development.
22INFO-DIR-SECTION Software development
23START-INFO-DIR-ENTRY
24* gcc: (gcc).                  The GNU Compiler Collection.
25* g++: (gcc).                  The GNU C++ compiler.
26* gcov: (gcc) Gcov.            'gcov'--a test coverage program.
27END-INFO-DIR-ENTRY
28
29 This file documents the use of the GNU compilers.
30
31 Copyright (C) 1988-2013 Free Software Foundation, Inc.
32
33 Permission is granted to copy, distribute and/or modify this document
34under the terms of the GNU Free Documentation License, Version 1.3 or
35any later version published by the Free Software Foundation; with the
36Invariant Sections being "Funding Free Software", the Front-Cover Texts
37being (a) (see below), and with the Back-Cover Texts being (b) (see
38below).  A copy of the license is included in the section entitled "GNU
39Free Documentation License".
40
41 (a) The FSF's Front-Cover Text is:
42
43 A GNU Manual
44
45 (b) The FSF's Back-Cover Text is:
46
47 You have freedom to copy and modify this GNU Manual, like GNU software.
48Copies published by the Free Software Foundation raise funds for GNU
49development.
50
51
52File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
53
54Introduction
55************
56
57This manual documents how to use the GNU compilers, as well as their
58features and incompatibilities, and how to report bugs.  It corresponds
59to the compilers (GCC) version 4.8.3.  The internals of the GNU
60compilers, including how to port them to new targets and some
61information about how to write front ends for new languages, are
62documented in a separate manual.  *Note Introduction: (gccint)Top.
63
64* Menu:
65
66* G++ and GCC::     You can compile C or C++ programs.
67* Standards::       Language standards supported by GCC.
68* Invoking GCC::    Command options supported by 'gcc'.
69* C Implementation:: How GCC implements the ISO C specification.
70* C++ Implementation:: How GCC implements the ISO C++ specification.
71* C Extensions::    GNU extensions to the C language family.
72* C++ Extensions::  GNU extensions to the C++ language.
73* Objective-C::     GNU Objective-C runtime features.
74* Compatibility::   Binary Compatibility
75* Gcov::            'gcov'--a test coverage program.
76* Trouble::         If you have trouble using GCC.
77* Bugs::            How, why and where to report bugs.
78* Service::         How to find suppliers of support for GCC.
79* Contributing::    How to contribute to testing and developing GCC.
80
81* Funding::         How to help assure funding for free software.
82* GNU Project::     The GNU Project and GNU/Linux.
83
84* Copying::         GNU General Public License says
85                    how you can copy and share GCC.
86* GNU Free Documentation License:: How you can copy and share this manual.
87* Contributors::    People who have contributed to GCC.
88
89* Option Index::    Index to command line options.
90* Keyword Index::   Index of concepts and symbol names.
91
92
93File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Up: Top
94
951 Programming Languages Supported by GCC
96****************************************
97
98GCC stands for "GNU Compiler Collection".  GCC is an integrated
99distribution of compilers for several major programming languages.
100These languages currently include C, C++, Objective-C, Objective-C++,
101Java, Fortran, Ada, and Go.
102
103 The abbreviation "GCC" has multiple meanings in common use.  The
104current official meaning is "GNU Compiler Collection", which refers
105generically to the complete suite of tools.  The name historically stood
106for "GNU C Compiler", and this usage is still common when the emphasis
107is on compiling C programs.  Finally, the name is also used when
108speaking of the "language-independent" component of GCC: code shared
109among the compilers for all supported languages.
110
111 The language-independent component of GCC includes the majority of the
112optimizers, as well as the "back ends" that generate machine code for
113various processors.
114
115 The part of a compiler that is specific to a particular language is
116called the "front end".  In addition to the front ends that are
117integrated components of GCC, there are several other front ends that
118are maintained separately.  These support languages such as Pascal,
119Mercury, and COBOL.  To use these, they must be built together with GCC
120proper.
121
122 Most of the compilers for languages other than C have their own names.
123The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
124talk about compiling one of those languages, we might refer to that
125compiler by its own name, or as GCC.  Either is correct.
126
127 Historically, compilers for many languages, including C++ and Fortran,
128have been implemented as "preprocessors" which emit another high level
129language such as C.  None of the compilers included in GCC are
130implemented this way; they all generate machine code directly.  This
131sort of preprocessor should not be confused with the "C preprocessor",
132which is an integral feature of the C, C++, Objective-C and
133Objective-C++ languages.
134
135
136File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
137
1382 Language Standards Supported by GCC
139*************************************
140
141For each language compiled by GCC for which there is a standard, GCC
142attempts to follow one or more versions of that standard, possibly with
143some exceptions, and possibly with some extensions.
144
1452.1 C language
146==============
147
148GCC supports three versions of the C standard, although support for the
149most recent version is not yet complete.
150
151 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
152published in 1990.  This standard was ratified as an ISO standard
153(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
154between these publications, although the sections of the ANSI standard
155were renumbered and became clauses in the ISO standard.  This standard,
156in both its forms, is commonly known as "C89", or occasionally as "C90",
157from the dates of ratification.  The ANSI standard, but not the ISO
158standard, also came with a Rationale document.  To select this standard
159in GCC, use one of the options '-ansi', '-std=c90' or
160'-std=iso9899:1990'; to obtain all the diagnostics required by the
161standard, you should also specify '-pedantic' (or '-pedantic-errors' if
162you want them to be errors rather than warnings).  *Note Options
163Controlling C Dialect: C Dialect Options.
164
165 Errors in the 1990 ISO C standard were corrected in two Technical
166Corrigenda published in 1994 and 1996.  GCC does not support the
167uncorrected version.
168
169 An amendment to the 1990 standard was published in 1995.  This
170amendment added digraphs and '__STDC_VERSION__' to the language, but
171otherwise concerned the library.  This amendment is commonly known as
172"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
173select this standard in GCC, use the option '-std=iso9899:199409' (with,
174as for other standard versions, '-pedantic' to receive all required
175diagnostics).
176
177 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1789899:1999, and is commonly known as "C99".  GCC has incomplete support
179for this standard version; see <http://gcc.gnu.org/c99status.html> for
180details.  To select this standard, use '-std=c99' or
181'-std=iso9899:1999'.  (While in development, drafts of this standard
182version were referred to as "C9X".)
183
184 Errors in the 1999 ISO C standard were corrected in three Technical
185Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
186uncorrected version.
187
188 A fourth version of the C standard, known as "C11", was published in
1892011 as ISO/IEC 9899:2011.  GCC has limited incomplete support for parts
190of this standard, enabled with '-std=c11' or '-std=iso9899:2011'.
191(While in development, drafts of this standard version were referred to
192as "C1X".)
193
194 By default, GCC provides some extensions to the C language that on rare
195occasions conflict with the C standard.  *Note Extensions to the C
196Language Family: C Extensions.  Use of the '-std' options listed above
197will disable these extensions where they conflict with the C standard
198version selected.  You may also select an extended version of the C
199language explicitly with '-std=gnu90' (for C90 with GNU extensions),
200'-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with
201GNU extensions).  The default, if no C language dialect options are
202given, is '-std=gnu90'; this will change to '-std=gnu99' or '-std=gnu11'
203in some future release when the C99 or C11 support is complete.  Some
204features that are part of the C99 standard are accepted as extensions in
205C90 mode, and some features that are part of the C11 standard are
206accepted as extensions in C90 and C99 modes.
207
208 The ISO C standard defines (in clause 4) two classes of conforming
209implementation.  A "conforming hosted implementation" supports the whole
210standard including all the library facilities; a "conforming
211freestanding implementation" is only required to provide certain library
212facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
213'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
214those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
215'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
216in C99, are not required for freestanding implementations.  The standard
217also defines two environments for programs, a "freestanding
218environment", required of all implementations and which may not have
219library facilities beyond those required of freestanding
220implementations, where the handling of program startup and termination
221are implementation-defined, and a "hosted environment", which is not
222required, in which all the library facilities are provided and startup
223is through a function 'int main (void)' or 'int main (int, char *[])'.
224An OS kernel would be a freestanding environment; a program using the
225facilities of an operating system would normally be in a hosted
226implementation.
227
228 GCC aims towards being usable as a conforming freestanding
229implementation, or as the compiler for a conforming hosted
230implementation.  By default, it will act as the compiler for a hosted
231implementation, defining '__STDC_HOSTED__' as '1' and presuming that
232when the names of ISO C functions are used, they have the semantics
233defined in the standard.  To make it act as a conforming freestanding
234implementation for a freestanding environment, use the option
235'-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not
236make assumptions about the meanings of function names from the standard
237library, with exceptions noted below.  To build an OS kernel, you may
238well still need to make your own arrangements for linking and startup.
239*Note Options Controlling C Dialect: C Dialect Options.
240
241 GCC does not provide the library facilities required only of hosted
242implementations, nor yet all the facilities required by C99 of
243freestanding implementations; to use the facilities of a hosted
244environment, you will need to find them elsewhere (for example, in the
245GNU C library).  *Note Standard Libraries: Standard Libraries.
246
247 Most of the compiler support routines used by GCC are present in
248'libgcc', but there are a few exceptions.  GCC requires the freestanding
249environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
250Finally, if '__builtin_trap' is used, and the target does not implement
251the 'trap' pattern, then GCC will emit a call to 'abort'.
252
253 For references to Technical Corrigenda, Rationale documents and
254information concerning the history of C that is available online, see
255<http://gcc.gnu.org/readings.html>
256
2572.2 C++ language
258================
259
260GCC supports the original ISO C++ standard (1998) and contains
261experimental support for the second ISO C++ standard (2011).
262
263 The original ISO C++ standard was published as the ISO standard
264(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2652003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
266C++03, respectively.  GCC implements the majority of C++98 ('export' is
267a notable exception) and most of the changes in C++03.  To select this
268standard in GCC, use one of the options '-ansi', '-std=c++98', or
269'-std=c++03'; to obtain all the diagnostics required by the standard,
270you should also specify '-pedantic' (or '-pedantic-errors' if you want
271them to be errors rather than warnings).
272
273 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
274and is referred to as C++11; before its publication it was commonly
275referred to as C++0x.  C++11 contains several changes to the C++
276language, most of which have been implemented in an experimental C++11
277mode in GCC.  For information regarding the C++11 features available in
278the experimental C++11 mode, see
279<http://gcc.gnu.org/projects/cxx0x.html>.  To select this standard in
280GCC, use the option '-std=c++11'; to obtain all the diagnostics required
281by the standard, you should also specify '-pedantic' (or
282'-pedantic-errors' if you want them to be errors rather than warnings).
283
284 More information about the C++ standards is available on the ISO C++
285committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
286
287 By default, GCC provides some extensions to the C++ language; *Note
288Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
289option listed above will disable these extensions.  You may also select
290an extended version of the C++ language explicitly with '-std=gnu++98'
291(for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU
292extensions).  The default, if no C++ language dialect options are given,
293is '-std=gnu++98'.
294
2952.3 Objective-C and Objective-C++ languages
296===========================================
297
298GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
299and contains support for the Objective-C exception and synchronization
300syntax.  It has also support for a number of "Objective-C 2.0" language
301extensions, including properties, fast enumeration (only for
302Objective-C), method attributes and the @optional and @required keywords
303in protocols.  GCC supports Objective-C++ and features available in
304Objective-C are also available in Objective-C++.
305
306 GCC by default uses the GNU Objective-C runtime library, which is part
307of GCC and is not the same as the Apple/NeXT Objective-C runtime library
308used on Apple systems.  There are a number of differences documented in
309this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
310to switch between producing output that works with the GNU Objective-C
311runtime library and output that works with the Apple/NeXT Objective-C
312runtime library.
313
314 There is no formal written standard for Objective-C or Objective-C++.
315The authoritative manual on traditional Objective-C (1.0) is
316"Object-Oriented Programming and the Objective-C Language", available at
317a number of web sites:
318   * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf>
319     is the original NeXTstep document;
320   * <http://objc.toodarkpark.net> is the same document in another
321     format;
322   *
323     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
324     has an updated version but make sure you search for "Object
325     Oriented Programming and the Objective-C Programming Language 1.0",
326     not documentation on the newer "Objective-C 2.0" language
327
328 The Objective-C exception and synchronization syntax (that is, the
329keywords @try, @throw, @catch, @finally and @synchronized) is supported
330by GCC and is enabled with the option '-fobjc-exceptions'.  The syntax
331is briefly documented in this manual and in the Objective-C 2.0 manuals
332from Apple.
333
334 The Objective-C 2.0 language extensions and features are automatically
335enabled; they include properties (via the @property, @synthesize and
336@dynamic keywords), fast enumeration (not available in Objective-C++),
337attributes for methods (such as deprecated, noreturn, sentinel, format),
338the unused attribute for method arguments, the @package keyword for
339instance variables and the @optional and @required keywords in
340protocols.  You can disable all these Objective-C 2.0 language
341extensions with the option '-fobjc-std=objc1', which causes the compiler
342to recognize the same Objective-C language syntax recognized by GCC 4.0,
343and to produce an error if one of the new features is used.
344
345 GCC has currently no support for non-fragile instance variables.
346
347 The authoritative manual on Objective-C 2.0 is available from Apple:
348   *
349     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
350
351 For more information concerning the history of Objective-C that is
352available online, see <http://gcc.gnu.org/readings.html>
353
3542.4 Go language
355===============
356
357As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
358described at <http://golang.org/doc/go1.html>.
359
3602.5 References for other languages
361==================================
362
363*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
364conformance and compatibility of the Ada compiler.
365
366 *Note Standards: (gfortran)Standards, for details of standards
367supported by GNU Fortran.
368
369 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
370details of compatibility between 'gcj' and the Java Platform.
371
372
373File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
374
3753 GCC Command Options
376*********************
377
378When you invoke GCC, it normally does preprocessing, compilation,
379assembly and linking.  The "overall options" allow you to stop this
380process at an intermediate stage.  For example, the '-c' option says not
381to run the linker.  Then the output consists of object files output by
382the assembler.
383
384 Other options are passed on to one stage of processing.  Some options
385control the preprocessor and others the compiler itself.  Yet other
386options control the assembler and linker; most of these are not
387documented here, since you rarely need to use any of them.
388
389 Most of the command-line options that you can use with GCC are useful
390for C programs; when an option is only useful with another language
391(usually C++), the explanation says so explicitly.  If the description
392for a particular option does not mention a source language, you can use
393that option with all supported languages.
394
395 *Note Compiling C++ Programs: Invoking G++, for a summary of special
396options for compiling C++ programs.
397
398 The 'gcc' program accepts options and file names as operands.  Many
399options have multi-letter names; therefore multiple single-letter
400options may _not_ be grouped: '-dv' is very different from '-d -v'.
401
402 You can mix options and other arguments.  For the most part, the order
403you use doesn't matter.  Order does matter when you use several options
404of the same kind; for example, if you specify '-L' more than once, the
405directories are searched in the order specified.  Also, the placement of
406the '-l' option is significant.
407
408 Many options have long names starting with '-f' or with '-W'--for
409example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
410have both positive and negative forms; the negative form of '-ffoo' is
411'-fno-foo'.  This manual documents only one of these two forms,
412whichever one is not the default.
413
414 *Note Option Index::, for an index to GCC's options.
415
416* Menu:
417
418* Option Summary::      Brief list of all options, without explanations.
419* Overall Options::     Controlling the kind of output:
420                        an executable, object files, assembler files,
421                        or preprocessed source.
422* Invoking G++::        Compiling C++ programs.
423* C Dialect Options::   Controlling the variant of C language compiled.
424* C++ Dialect Options:: Variations on C++.
425* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
426                        and Objective-C++.
427* Language Independent Options:: Controlling how diagnostics should be
428                        formatted.
429* Warning Options::     How picky should the compiler be?
430* Debugging Options::   Symbol tables, measurements, and debugging dumps.
431* Optimize Options::    How much optimization?
432* Preprocessor Options:: Controlling header files and macro definitions.
433                         Also, getting dependency information for Make.
434* Assembler Options::   Passing options to the assembler.
435* Link Options::        Specifying libraries and so on.
436* Directory Options::   Where to find header files and libraries.
437                        Where to find the compiler executable files.
438* Spec Files::          How to pass switches to sub-processes.
439* Target Options::      Running a cross-compiler, or an old version of GCC.
440* Submodel Options::    Specifying minor hardware or convention variations,
441                        such as 68010 vs 68020.
442* Code Gen Options::    Specifying conventions for function calls, data layout
443                        and register usage.
444* Environment Variables:: Env vars that affect GCC.
445* Precompiled Headers:: Compiling a header once, and using it many times.
446
447
448File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
449
4503.1 Option Summary
451==================
452
453Here is a summary of all the options, grouped by type.  Explanations are
454in the following sections.
455
456_Overall Options_
457     *Note Options Controlling the Kind of Output: Overall Options.
458          -c  -S  -E  -o FILE  -no-canonical-prefixes
459          -pipe  -pass-exit-codes
460          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
461          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
462          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
463
464_C Language Options_
465     *Note Options Controlling C Dialect: C Dialect Options.
466          -ansi  -std=STANDARD  -fgnu89-inline
467          -aux-info FILENAME -fallow-parameterless-variadic-functions
468          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
469          -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
470          -trigraphs  -traditional  -traditional-cpp
471          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
472          -fsigned-bitfields  -fsigned-char
473          -funsigned-bitfields  -funsigned-char
474
475_C++ Language Options_
476     *Note Options Controlling C++ Dialect: C++ Dialect Options.
477          -fabi-version=N  -fno-access-control  -fcheck-new
478          -fconstexpr-depth=N  -ffriend-injection
479          -fno-elide-constructors
480          -fno-enforce-eh-specs
481          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
482          -fno-implicit-templates
483          -fno-implicit-inline-templates
484          -fno-implement-inlines  -fms-extensions
485          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
486          -fno-optional-diags  -fpermissive
487          -fno-pretty-templates
488          -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
489          -ftemplate-depth=N
490          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
491          -fno-default-inline  -fvisibility-inlines-hidden
492          -fvisibility-ms-compat
493          -fext-numeric-literals
494          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
495          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
496          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
497          -Weffc++  -Wstrict-null-sentinel
498          -Wno-non-template-friend  -Wold-style-cast
499          -Woverloaded-virtual  -Wno-pmf-conversions
500          -Wsign-promo
501
502_Objective-C and Objective-C++ Language Options_
503     *Note Options Controlling Objective-C and Objective-C++ Dialects:
504     Objective-C and Objective-C++ Dialect Options.
505          -fconstant-string-class=CLASS-NAME
506          -fgnu-runtime  -fnext-runtime
507          -fno-nil-receivers
508          -fobjc-abi-version=N
509          -fobjc-call-cxx-cdtors
510          -fobjc-direct-dispatch
511          -fobjc-exceptions
512          -fobjc-gc
513          -fobjc-nilcheck
514          -fobjc-std=objc1
515          -freplace-objc-classes
516          -fzero-link
517          -gen-decls
518          -Wassign-intercept
519          -Wno-protocol  -Wselector
520          -Wstrict-selector-match
521          -Wundeclared-selector
522
523_Language Independent Options_
524     *Note Options to Control Diagnostic Messages Formatting: Language
525     Independent Options.
526          -fmessage-length=N
527          -fdiagnostics-show-location=[once|every-line]
528          -fno-diagnostics-show-option -fno-diagnostics-show-caret
529
530_Warning Options_
531     *Note Options to Request or Suppress Warnings: Warning Options.
532          -fsyntax-only  -fmax-errors=N  -Wpedantic
533          -pedantic-errors
534          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
535          -Waggressive-loop-optimizations -Warray-bounds
536          -Wno-attributes -Wno-builtin-macro-redefined
537          -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual
538          -Wchar-subscripts -Wclobbered  -Wcomment
539          -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
540          -Wno-deprecated-declarations -Wdisabled-optimization
541          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
542          -Wno-endif-labels -Werror  -Werror=*
543          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
544          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
545          -Wformat-security  -Wformat-y2k
546          -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
547          -Wignored-qualifiers
548          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
549          -Winit-self  -Winline -Wmaybe-uninitialized
550          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
551          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
552          -Wlogical-op -Wlong-long
553          -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
554          -Wmissing-include-dirs
555          -Wno-mudflap
556          -Wno-multichar  -Wnonnull  -Wno-overflow
557          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
558          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
559          -Wpointer-arith  -Wno-pointer-to-int-cast
560          -Wredundant-decls  -Wno-return-local-addr
561          -Wreturn-type  -Wsequence-point  -Wshadow
562          -Wsign-compare  -Wsign-conversion  -Wsizeof-pointer-memaccess
563          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
564          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
565          -Wsuggest-attribute=[pure|const|noreturn|format]
566          -Wmissing-format-attribute
567          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
568          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
569          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
570          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
571          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
572          -Wno-unused-result -Wunused-value  -Wunused-variable
573          -Wunused-but-set-parameter -Wunused-but-set-variable
574          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
575          -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
576
577_C and Objective-C-only Warning Options_
578          -Wbad-function-cast  -Wmissing-declarations
579          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
580          -Wold-style-declaration  -Wold-style-definition
581          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
582          -Wdeclaration-after-statement -Wpointer-sign
583
584_Debugging Options_
585     *Note Options for Debugging Your Program or GCC: Debugging Options.
586          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
587          -fsanitize=STYLE
588          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
589          -fdisable-ipa-PASS_NAME
590          -fdisable-rtl-PASS_NAME
591          -fdisable-rtl-PASS-NAME=RANGE-LIST
592          -fdisable-tree-PASS_NAME
593          -fdisable-tree-PASS-NAME=RANGE-LIST
594          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
595          -fdump-translation-unit[-N]
596          -fdump-class-hierarchy[-N]
597          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
598          -fdump-passes
599          -fdump-statistics
600          -fdump-tree-all
601          -fdump-tree-original[-N]
602          -fdump-tree-optimized[-N]
603          -fdump-tree-cfg -fdump-tree-alias
604          -fdump-tree-ch
605          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
606          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
607          -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
608          -fdump-tree-dom[-N]
609          -fdump-tree-dse[-N]
610          -fdump-tree-phiprop[-N]
611          -fdump-tree-phiopt[-N]
612          -fdump-tree-forwprop[-N]
613          -fdump-tree-copyrename[-N]
614          -fdump-tree-nrv -fdump-tree-vect
615          -fdump-tree-sink
616          -fdump-tree-sra[-N]
617          -fdump-tree-forwprop[-N]
618          -fdump-tree-fre[-N]
619          -fdump-tree-vrp[-N]
620          -ftree-vectorizer-verbose=N
621          -fdump-tree-storeccp[-N]
622          -fdump-final-insns=FILE
623          -fcompare-debug[=OPTS]  -fcompare-debug-second
624          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
625          -feliminate-unused-debug-symbols -femit-class-debug-always
626          -fenable-KIND-PASS
627          -fenable-KIND-PASS=RANGE-LIST
628          -fdebug-types-section -fmem-report-wpa
629          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
630          -fopt-info
631          -fopt-info-OPTIONS[=FILE]
632          -frandom-seed=STRING -fsched-verbose=N
633          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
634          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
635          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
636          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
637          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
638          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
639          -gvms  -gxcoff  -gxcoff+
640          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
641          -fdebug-prefix-map=OLD=NEW
642          -femit-struct-debug-baseonly -femit-struct-debug-reduced
643          -femit-struct-debug-detailed[=SPEC-LIST]
644          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
645          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
646          -print-prog-name=PROGRAM  -print-search-dirs  -Q
647          -print-sysroot -print-sysroot-headers-suffix
648          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
649
650_Optimization Options_
651     *Note Options that Control Optimization: Optimize Options.
652          -faggressive-loop-optimizations -falign-functions[=N]
653          -falign-jumps[=N]
654          -falign-labels[=N] -falign-loops[=N]
655          -fassociative-math -fauto-inc-dec -fbranch-probabilities
656          -fbranch-target-load-optimize -fbranch-target-load-optimize2
657          -fbtr-bb-exclusive -fcaller-saves
658          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
659          -fcompare-elim -fcprop-registers -fcrossjumping
660          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
661          -fcx-limited-range
662          -fdata-sections -fdce -fdelayed-branch
663          -fdelete-null-pointer-checks -fdevirtualize -fdse
664          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
665          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
666          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
667          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
668          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
669          -fif-conversion2 -findirect-inlining
670          -finline-functions -finline-functions-called-once -finline-limit=N
671          -finline-small-functions -fipa-cp -fipa-cp-clone
672          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
673          -fira-algorithm=ALGORITHM
674          -fira-region=REGION -fira-hoist-pressure
675          -fira-loop-pressure -fno-ira-share-save-slots
676          -fno-ira-share-spill-slots -fira-verbose=N
677          -fivopts -fkeep-inline-functions -fkeep-static-consts
678          -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
679          -floop-parallelize-all -flto -flto-compression-level
680          -flto-partition=ALG -flto-report -fmerge-all-constants
681          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
682          -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
683          -fno-default-inline
684          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
685          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
686          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
687          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
688          -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
689          -fpartial-inlining -fpeel-loops -fpredictive-commoning
690          -fprefetch-loop-arrays -fprofile-report
691          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
692          -fprofile-generate=PATH
693          -fprofile-use -fprofile-use=PATH -fprofile-values
694          -freciprocal-math -free -fregmove -frename-registers -freorder-blocks
695          -freorder-blocks-and-partition -freorder-functions
696          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
697          -frounding-math -fsched2-use-superblocks -fsched-pressure
698          -fsched-spec-load -fsched-spec-load-dangerous
699          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
700          -fsched-group-heuristic -fsched-critical-path-heuristic
701          -fsched-spec-insn-heuristic -fsched-rank-heuristic
702          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
703          -fschedule-insns -fschedule-insns2 -fsection-anchors
704          -fselective-scheduling -fselective-scheduling2
705          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
706          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
707          -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
708          -fstack-protector-all -fstrict-aliasing -fstrict-overflow
709          -fthread-jumps -ftracer -ftree-bit-ccp
710          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
711          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
712          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
713          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
714          -ftree-loop-if-convert-stores -ftree-loop-im
715          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
716          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
717          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
718          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
719          -ftree-switch-conversion -ftree-tail-merge
720          -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
721          -funit-at-a-time -funroll-all-loops -funroll-loops
722          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
723          -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
724          -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
725          --param NAME=VALUE
726          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
727
728_Preprocessor Options_
729     *Note Options Controlling the Preprocessor: Preprocessor Options.
730          -AQUESTION=ANSWER
731          -A-QUESTION[=ANSWER]
732          -C  -dD  -dI  -dM  -dN
733          -DMACRO[=DEFN]  -E  -H
734          -idirafter DIR
735          -include FILE  -imacros FILE
736          -iprefix FILE  -iwithprefix DIR
737          -iwithprefixbefore DIR  -isystem DIR
738          -imultilib DIR -isysroot DIR
739          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
740          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
741          -remap -trigraphs  -undef  -UMACRO
742          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
743
744_Assembler Option_
745     *Note Passing Options to the Assembler: Assembler Options.
746          -Wa,OPTION  -Xassembler OPTION
747
748_Linker Options_
749     *Note Options for Linking: Link Options.
750          OBJECT-FILE-NAME  -lLIBRARY
751          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
752          -s  -static -static-libgcc -static-libstdc++
753          -static-libasan -static-libtsan
754          -shared -shared-libgcc  -symbolic
755          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
756          -u SYMBOL
757
758_Directory Options_
759     *Note Options for Directory Search: Directory Options.
760          -BPREFIX -IDIR -iplugindir=DIR
761          -iquoteDIR -LDIR -specs=FILE -I-
762          --sysroot=DIR --no-sysroot-suffix
763
764_Machine Dependent Options_
765     *Note Hardware Models and Configurations: Submodel Options.
766
767     _AArch64 Options_
768          -mbig-endian  -mlittle-endian
769          -mgeneral-regs-only
770          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
771          -mstrict-align
772          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
773          -mtls-dialect=desc  -mtls-dialect=traditional
774          -march=NAME  -mcpu=NAME  -mtune=NAME
775
776     _Adapteva Epiphany Options_
777          -mhalf-reg-file -mprefer-short-insn-regs
778          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
779          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
780          -mround-nearest -mlong-calls -mshort-calls -msmall16
781          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
782          -msplit-vecmove-early -m1reg-REG
783
784     _ARM Options_
785          -mapcs-frame  -mno-apcs-frame
786          -mabi=NAME
787          -mapcs-stack-check  -mno-apcs-stack-check
788          -mapcs-float  -mno-apcs-float
789          -mapcs-reentrant  -mno-apcs-reentrant
790          -msched-prolog  -mno-sched-prolog
791          -mlittle-endian  -mbig-endian  -mwords-little-endian
792          -mfloat-abi=NAME
793          -mfp16-format=NAME
794          -mthumb-interwork  -mno-thumb-interwork
795          -mcpu=NAME  -march=NAME  -mfpu=NAME
796          -mstructure-size-boundary=N
797          -mabort-on-noreturn
798          -mlong-calls  -mno-long-calls
799          -msingle-pic-base  -mno-single-pic-base
800          -mpic-register=REG
801          -mnop-fun-dllimport
802          -mpoke-function-name
803          -mthumb  -marm
804          -mtpcs-frame  -mtpcs-leaf-frame
805          -mcaller-super-interworking  -mcallee-super-interworking
806          -mtp=NAME -mtls-dialect=DIALECT
807          -mword-relocations
808          -mfix-cortex-m3-ldrd
809          -munaligned-access
810
811     _AVR Options_
812          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
813          -mcall-prologues -mint8 -mno-interrupts -mrelax
814          -mstrict-X -mtiny-stack -Waddr-space-convert
815
816     _Blackfin Options_
817          -mcpu=CPU[-SIREVISION]
818          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
819          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
820          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
821          -mno-id-shared-library  -mshared-library-id=N
822          -mleaf-id-shared-library  -mno-leaf-id-shared-library
823          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
824          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
825          -micplb
826
827     _C6X Options_
828          -mbig-endian  -mlittle-endian -march=CPU
829          -msim -msdata=SDATA-TYPE
830
831     _CRIS Options_
832          -mcpu=CPU  -march=CPU  -mtune=CPU
833          -mmax-stack-frame=N  -melinux-stacksize=N
834          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
835          -mstack-align  -mdata-align  -mconst-align
836          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
837          -melf  -maout  -melinux  -mlinux  -sim  -sim2
838          -mmul-bug-workaround  -mno-mul-bug-workaround
839
840     _CR16 Options_
841          -mmac
842          -mcr16cplus -mcr16c
843          -msim -mint32 -mbit-ops
844          -mdata-model=MODEL
845
846     _Darwin Options_
847          -all_load  -allowable_client  -arch  -arch_errors_fatal
848          -arch_only  -bind_at_load  -bundle  -bundle_loader
849          -client_name  -compatibility_version  -current_version
850          -dead_strip
851          -dependency-file  -dylib_file  -dylinker_install_name
852          -dynamic  -dynamiclib  -exported_symbols_list
853          -filelist  -flat_namespace  -force_cpusubtype_ALL
854          -force_flat_namespace  -headerpad_max_install_names
855          -iframework
856          -image_base  -init  -install_name  -keep_private_externs
857          -multi_module  -multiply_defined  -multiply_defined_unused
858          -noall_load   -no_dead_strip_inits_and_terms
859          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
860          -pagezero_size  -prebind  -prebind_all_twolevel_modules
861          -private_bundle  -read_only_relocs  -sectalign
862          -sectobjectsymbols  -whyload  -seg1addr
863          -sectcreate  -sectobjectsymbols  -sectorder
864          -segaddr -segs_read_only_addr -segs_read_write_addr
865          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
866          -segprot  -segs_read_only_addr  -segs_read_write_addr
867          -single_module  -static  -sub_library  -sub_umbrella
868          -twolevel_namespace  -umbrella  -undefined
869          -unexported_symbols_list  -weak_reference_mismatches
870          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
871          -mkernel -mone-byte-bool
872
873     _DEC Alpha Options_
874          -mno-fp-regs  -msoft-float
875          -mieee  -mieee-with-inexact  -mieee-conformant
876          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
877          -mtrap-precision=MODE  -mbuild-constants
878          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
879          -mbwx  -mmax  -mfix  -mcix
880          -mfloat-vax  -mfloat-ieee
881          -mexplicit-relocs  -msmall-data  -mlarge-data
882          -msmall-text  -mlarge-text
883          -mmemory-latency=TIME
884
885     _FR30 Options_
886          -msmall-model -mno-lsim
887
888     _FRV Options_
889          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
890          -mhard-float  -msoft-float
891          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
892          -mdouble  -mno-double
893          -mmedia  -mno-media  -mmuladd  -mno-muladd
894          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
895          -mlinked-fp  -mlong-calls  -malign-labels
896          -mlibrary-pic  -macc-4  -macc-8
897          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
898          -moptimize-membar -mno-optimize-membar
899          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
900          -mvliw-branch  -mno-vliw-branch
901          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
902          -mno-nested-cond-exec  -mtomcat-stats
903          -mTLS -mtls
904          -mcpu=CPU
905
906     _GNU/Linux Options_
907          -mglibc -muclibc -mbionic -mandroid
908          -tno-android-cc -tno-android-ld
909
910     _H8/300 Options_
911          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
912
913     _HPPA Options_
914          -march=ARCHITECTURE-TYPE
915          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
916          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
917          -mfixed-range=REGISTER-RANGE
918          -mjump-in-delay -mlinker-opt -mlong-calls
919          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
920          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
921          -mno-jump-in-delay  -mno-long-load-store
922          -mno-portable-runtime  -mno-soft-float
923          -mno-space-regs  -msoft-float  -mpa-risc-1-0
924          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
925          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
926          -munix=UNIX-STD  -nolibdld  -static  -threads
927
928     _i386 and x86-64 Options_
929          -mtune=CPU-TYPE  -march=CPU-TYPE
930          -mfpmath=UNIT
931          -masm=DIALECT  -mno-fancy-math-387
932          -mno-fp-ret-in-387  -msoft-float
933          -mno-wide-multiply  -mrtd  -malign-double
934          -mpreferred-stack-boundary=NUM
935          -mincoming-stack-boundary=NUM
936          -mcld -mcx16 -msahf -mmovbe -mcrc32
937          -mrecip -mrecip=OPT
938          -mvzeroupper -mprefer-avx128
939          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
940          -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma
941          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
942          -mbmi2 -mrtm -mlwp -mthreads
943          -mno-align-stringops  -minline-all-stringops
944          -minline-stringops-dynamically -mstringop-strategy=ALG
945          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
946          -m96bit-long-double -mlong-double-64 -mlong-double-80
947          -mregparm=NUM  -msseregparm
948          -mveclibabi=TYPE -mvect8-ret-in-mem
949          -mpc32 -mpc64 -mpc80 -mstackrealign
950          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
951          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
952          -m32 -m64 -mx32 -mlarge-data-threshold=NUM
953          -msse2avx -mfentry -m8bit-idiv
954          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
955
956     _i386 and x86-64 Windows Options_
957          -mconsole -mcygwin -mno-cygwin -mdll
958          -mnop-fun-dllimport -mthread
959          -municode -mwin32 -mwindows -fno-set-stack-executable
960
961     _IA-64 Options_
962          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
963          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
964          -mconstant-gp  -mauto-pic  -mfused-madd
965          -minline-float-divide-min-latency
966          -minline-float-divide-max-throughput
967          -mno-inline-float-divide
968          -minline-int-divide-min-latency
969          -minline-int-divide-max-throughput
970          -mno-inline-int-divide
971          -minline-sqrt-min-latency -minline-sqrt-max-throughput
972          -mno-inline-sqrt
973          -mdwarf2-asm -mearly-stop-bits
974          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
975          -mtune=CPU-TYPE -milp32 -mlp64
976          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
977          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
978          -msched-spec-ldc -msched-spec-control-ldc
979          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
980          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
981          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
982          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
983
984     _LM32 Options_
985          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
986          -msign-extend-enabled -muser-enabled
987
988     _M32R/D Options_
989          -m32r2 -m32rx -m32r
990          -mdebug
991          -malign-loops -mno-align-loops
992          -missue-rate=NUMBER
993          -mbranch-cost=NUMBER
994          -mmodel=CODE-SIZE-MODEL-TYPE
995          -msdata=SDATA-TYPE
996          -mno-flush-func -mflush-func=NAME
997          -mno-flush-trap -mflush-trap=NUMBER
998          -G NUM
999
1000     _M32C Options_
1001          -mcpu=CPU -msim -memregs=NUMBER
1002
1003     _M680x0 Options_
1004          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1005          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1006          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1007          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1008          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1009          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1010          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1011          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1012          -mxgot -mno-xgot
1013
1014     _MCore Options_
1015          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1016          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1017          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1018          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1019          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1020
1021     _MeP Options_
1022          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1023          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1024          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1025          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1026          -mtiny=N
1027
1028     _MicroBlaze Options_
1029          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1030          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1031          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1032          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1033          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1034
1035     _MIPS Options_
1036          -EL  -EB  -march=ARCH  -mtune=ARCH
1037          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
1038          -mips64  -mips64r2
1039          -mips16  -mno-mips16  -mflip-mips16
1040          -minterlink-mips16  -mno-interlink-mips16
1041          -mabi=ABI  -mabicalls  -mno-abicalls
1042          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1043          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
1044          -mno-float -msingle-float  -mdouble-float
1045          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1046          -mmcu -mmno-mcu
1047          -mfpu=FPU-TYPE
1048          -msmartmips  -mno-smartmips
1049          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1050          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1051          -mlong64  -mlong32  -msym32  -mno-sym32
1052          -GNUM  -mlocal-sdata  -mno-local-sdata
1053          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1054          -membedded-data  -mno-embedded-data
1055          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1056          -mcode-readable=SETTING
1057          -msplit-addresses  -mno-split-addresses
1058          -mexplicit-relocs  -mno-explicit-relocs
1059          -mcheck-zero-division  -mno-check-zero-division
1060          -mdivide-traps  -mdivide-breaks
1061          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1062          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
1063          -mfix-24k -mno-fix-24k
1064          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1065          -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
1066          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1067          -mflush-func=FUNC  -mno-flush-func
1068          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1069          -mfp-exceptions -mno-fp-exceptions
1070          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1071          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1072
1073     _MMIX Options_
1074          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1075          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1076          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1077          -mno-base-addresses  -msingle-exit  -mno-single-exit
1078
1079     _MN10300 Options_
1080          -mmult-bug  -mno-mult-bug
1081          -mno-am33 -mam33 -mam33-2 -mam34
1082          -mtune=CPU-TYPE
1083          -mreturn-pointer-on-d0
1084          -mno-crt0  -mrelax -mliw -msetlb
1085
1086     _Moxie Options_
1087          -meb -mel -mno-crt0
1088
1089     _PDP-11 Options_
1090          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1091          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1092          -mint16  -mno-int32  -mfloat32  -mno-float64
1093          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1094          -mbranch-expensive  -mbranch-cheap
1095          -munix-asm  -mdec-asm
1096
1097     _picoChip Options_
1098          -mae=AE_TYPE -mvliw-lookahead=N
1099          -msymbol-as-address -mno-inefficient-warnings
1100
1101     _PowerPC Options_ See RS/6000 and PowerPC Options.
1102
1103     _RL78 Options_
1104          -msim -mmul=none -mmul=g13 -mmul=rl78
1105
1106     _RS/6000 and PowerPC Options_
1107          -mcpu=CPU-TYPE
1108          -mtune=CPU-TYPE
1109          -mcmodel=CODE-MODEL
1110          -mpowerpc64
1111          -maltivec  -mno-altivec
1112          -mpowerpc-gpopt  -mno-powerpc-gpopt
1113          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1114          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1115          -mfprnd  -mno-fprnd
1116          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1117          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1118          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1119          -malign-power  -malign-natural
1120          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1121          -msingle-float -mdouble-float -msimple-fpu
1122          -mstring  -mno-string  -mupdate  -mno-update
1123          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1124          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1125          -mstrict-align  -mno-strict-align  -mrelocatable
1126          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1127          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1128          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1129          -mprioritize-restricted-insns=PRIORITY
1130          -msched-costly-dep=DEPENDENCE_TYPE
1131          -minsert-sched-nops=SCHEME
1132          -mcall-sysv  -mcall-netbsd
1133          -maix-struct-return  -msvr4-struct-return
1134          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1135          -mblock-move-inline-limit=NUM
1136          -misel -mno-isel
1137          -misel=yes  -misel=no
1138          -mspe -mno-spe
1139          -mspe=yes  -mspe=no
1140          -mpaired
1141          -mgen-cell-microcode -mwarn-cell-microcode
1142          -mvrsave -mno-vrsave
1143          -mmulhw -mno-mulhw
1144          -mdlmzb -mno-dlmzb
1145          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1146          -mprototype  -mno-prototype
1147          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1148          -msdata=OPT  -mvxworks  -G NUM  -pthread
1149          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1150          -mno-recip-precision
1151          -mveclibabi=TYPE -mfriz -mno-friz
1152          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1153          -msave-toc-indirect -mno-save-toc-indirect
1154          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
1155          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
1156          -mquad-memory -mno-quad-memory
1157          -mquad-memory-atomic -mno-quad-memory-atomic
1158          -mcompat-align-parm -mno-compat-align-parm
1159
1160     _RX Options_
1161          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1162          -mcpu=
1163          -mbig-endian-data -mlittle-endian-data
1164          -msmall-data
1165          -msim  -mno-sim
1166          -mas100-syntax -mno-as100-syntax
1167          -mrelax
1168          -mmax-constant-size=
1169          -mint-register=
1170          -mpid
1171          -mno-warn-multiple-fast-interrupts
1172          -msave-acc-in-interrupts
1173
1174     _S/390 and zSeries Options_
1175          -mtune=CPU-TYPE  -march=CPU-TYPE
1176          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1177          -mlong-double-64 -mlong-double-128
1178          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1179          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1180          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1181          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1182          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1183          -mhotpatch[=HALFWORDS] -mno-hotpatch
1184
1185     _Score Options_
1186          -meb -mel
1187          -mnhwloop
1188          -muls
1189          -mmac
1190          -mscore5 -mscore5u -mscore7 -mscore7d
1191
1192     _SH Options_
1193          -m1  -m2  -m2e
1194          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1195          -m3  -m3e
1196          -m4-nofpu  -m4-single-only  -m4-single  -m4
1197          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1198          -m5-64media  -m5-64media-nofpu
1199          -m5-32media  -m5-32media-nofpu
1200          -m5-compact  -m5-compact-nofpu
1201          -mb  -ml  -mdalign  -mrelax
1202          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1203          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1204          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1205          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1206          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1207          -maccumulate-outgoing-args -minvalid-symbols
1208          -matomic-model=ATOMIC-MODEL
1209          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi
1210          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1211          -mpretend-cmove -mtas
1212
1213     _Solaris 2 Options_
1214          -mimpure-text  -mno-impure-text
1215          -pthreads -pthread
1216
1217     _SPARC Options_
1218          -mcpu=CPU-TYPE
1219          -mtune=CPU-TYPE
1220          -mcmodel=CODE-MODEL
1221          -mmemory-model=MEM-MODEL
1222          -m32  -m64  -mapp-regs  -mno-app-regs
1223          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1224          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1225          -mhard-quad-float  -msoft-quad-float
1226          -mstack-bias  -mno-stack-bias
1227          -munaligned-doubles  -mno-unaligned-doubles
1228          -muser-mode  -mno-user-mode
1229          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1230          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1231          -mcbcond -mno-cbcond
1232          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1233          -mfix-at697f -mfix-ut699
1234
1235     _SPU Options_
1236          -mwarn-reloc -merror-reloc
1237          -msafe-dma -munsafe-dma
1238          -mbranch-hints
1239          -msmall-mem -mlarge-mem -mstdmain
1240          -mfixed-range=REGISTER-RANGE
1241          -mea32 -mea64
1242          -maddress-space-conversion -mno-address-space-conversion
1243          -mcache-size=CACHE-SIZE
1244          -matomic-updates -mno-atomic-updates
1245
1246     _System V Options_
1247          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1248
1249     _TILE-Gx Options_
1250          -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
1251
1252     _TILEPro Options_
1253          -mcpu=CPU -m32
1254
1255     _V850 Options_
1256          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1257          -mprolog-function  -mno-prolog-function  -mspace
1258          -mtda=N  -msda=N  -mzda=N
1259          -mapp-regs  -mno-app-regs
1260          -mdisable-callt  -mno-disable-callt
1261          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1262          -mv850e -mv850 -mv850e3v5
1263          -mloop
1264          -mrelax
1265          -mlong-jumps
1266          -msoft-float
1267          -mhard-float
1268          -mgcc-abi
1269          -mrh850-abi
1270          -mbig-switch
1271
1272     _VAX Options_
1273          -mg  -mgnu  -munix
1274
1275     _VMS Options_
1276          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1277          -mpointer-size=SIZE
1278
1279     _VxWorks Options_
1280          -mrtp  -non-static  -Bstatic  -Bdynamic
1281          -Xbind-lazy  -Xbind-now
1282
1283     _x86-64 Options_ See i386 and x86-64 Options.
1284
1285     _Xstormy16 Options_
1286          -msim
1287
1288     _Xtensa Options_
1289          -mconst16 -mno-const16
1290          -mfused-madd  -mno-fused-madd
1291          -mforce-no-pic
1292          -mserialize-volatile  -mno-serialize-volatile
1293          -mtext-section-literals  -mno-text-section-literals
1294          -mtarget-align  -mno-target-align
1295          -mlongcalls  -mno-longcalls
1296
1297     _zSeries Options_ See S/390 and zSeries Options.
1298
1299_Code Generation Options_
1300     *Note Options for Code Generation Conventions: Code Gen Options.
1301          -fcall-saved-REG  -fcall-used-REG
1302          -ffixed-REG  -fexceptions
1303          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1304          -fasynchronous-unwind-tables
1305          -finhibit-size-directive  -finstrument-functions
1306          -finstrument-functions-exclude-function-list=SYM,SYM,...
1307          -finstrument-functions-exclude-file-list=FILE,FILE,...
1308          -fno-common  -fno-ident
1309          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1310          -fno-jump-tables
1311          -frecord-gcc-switches
1312          -freg-struct-return  -fshort-enums
1313          -fshort-double  -fshort-wchar
1314          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1315          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1316          -fno-stack-limit -fsplit-stack
1317          -fleading-underscore  -ftls-model=MODEL
1318          -fstack-reuse=REUSE_LEVEL
1319          -ftrapv  -fwrapv  -fbounds-check
1320          -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
1321
1322* Menu:
1323
1324* Overall Options::     Controlling the kind of output:
1325                        an executable, object files, assembler files,
1326                        or preprocessed source.
1327* C Dialect Options::   Controlling the variant of C language compiled.
1328* C++ Dialect Options:: Variations on C++.
1329* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1330                        and Objective-C++.
1331* Language Independent Options:: Controlling how diagnostics should be
1332                        formatted.
1333* Warning Options::     How picky should the compiler be?
1334* Debugging Options::   Symbol tables, measurements, and debugging dumps.
1335* Optimize Options::    How much optimization?
1336* Preprocessor Options:: Controlling header files and macro definitions.
1337                         Also, getting dependency information for Make.
1338* Assembler Options::   Passing options to the assembler.
1339* Link Options::        Specifying libraries and so on.
1340* Directory Options::   Where to find header files and libraries.
1341                        Where to find the compiler executable files.
1342* Spec Files::          How to pass switches to sub-processes.
1343* Target Options::      Running a cross-compiler, or an old version of GCC.
1344
1345
1346File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1347
13483.2 Options Controlling the Kind of Output
1349==========================================
1350
1351Compilation can involve up to four stages: preprocessing, compilation
1352proper, assembly and linking, always in that order.  GCC is capable of
1353preprocessing and compiling several files either into several assembler
1354input files, or into one assembler input file; then each assembler input
1355file produces an object file, and linking combines all the object files
1356(those newly compiled, and those specified as input) into an executable
1357file.
1358
1359 For any given input file, the file name suffix determines what kind of
1360compilation is done:
1361
1362'FILE.c'
1363     C source code that must be preprocessed.
1364
1365'FILE.i'
1366     C source code that should not be preprocessed.
1367
1368'FILE.ii'
1369     C++ source code that should not be preprocessed.
1370
1371'FILE.m'
1372     Objective-C source code.  Note that you must link with the
1373     'libobjc' library to make an Objective-C program work.
1374
1375'FILE.mi'
1376     Objective-C source code that should not be preprocessed.
1377
1378'FILE.mm'
1379'FILE.M'
1380     Objective-C++ source code.  Note that you must link with the
1381     'libobjc' library to make an Objective-C++ program work.  Note that
1382     '.M' refers to a literal capital M.
1383
1384'FILE.mii'
1385     Objective-C++ source code that should not be preprocessed.
1386
1387'FILE.h'
1388     C, C++, Objective-C or Objective-C++ header file to be turned into
1389     a precompiled header (default), or C, C++ header file to be turned
1390     into an Ada spec (via the '-fdump-ada-spec' switch).
1391
1392'FILE.cc'
1393'FILE.cp'
1394'FILE.cxx'
1395'FILE.cpp'
1396'FILE.CPP'
1397'FILE.c++'
1398'FILE.C'
1399     C++ source code that must be preprocessed.  Note that in '.cxx',
1400     the last two letters must both be literally 'x'.  Likewise, '.C'
1401     refers to a literal capital C.
1402
1403'FILE.mm'
1404'FILE.M'
1405     Objective-C++ source code that must be preprocessed.
1406
1407'FILE.mii'
1408     Objective-C++ source code that should not be preprocessed.
1409
1410'FILE.hh'
1411'FILE.H'
1412'FILE.hp'
1413'FILE.hxx'
1414'FILE.hpp'
1415'FILE.HPP'
1416'FILE.h++'
1417'FILE.tcc'
1418     C++ header file to be turned into a precompiled header or Ada spec.
1419
1420'FILE.f'
1421'FILE.for'
1422'FILE.ftn'
1423     Fixed form Fortran source code that should not be preprocessed.
1424
1425'FILE.F'
1426'FILE.FOR'
1427'FILE.fpp'
1428'FILE.FPP'
1429'FILE.FTN'
1430     Fixed form Fortran source code that must be preprocessed (with the
1431     traditional preprocessor).
1432
1433'FILE.f90'
1434'FILE.f95'
1435'FILE.f03'
1436'FILE.f08'
1437     Free form Fortran source code that should not be preprocessed.
1438
1439'FILE.F90'
1440'FILE.F95'
1441'FILE.F03'
1442'FILE.F08'
1443     Free form Fortran source code that must be preprocessed (with the
1444     traditional preprocessor).
1445
1446'FILE.go'
1447     Go source code.
1448
1449'FILE.ads'
1450     Ada source code file that contains a library unit declaration (a
1451     declaration of a package, subprogram, or generic, or a generic
1452     instantiation), or a library unit renaming declaration (a package,
1453     generic, or subprogram renaming declaration).  Such files are also
1454     called "specs".
1455
1456'FILE.adb'
1457     Ada source code file containing a library unit body (a subprogram
1458     or package body).  Such files are also called "bodies".
1459
1460'FILE.s'
1461     Assembler code.
1462
1463'FILE.S'
1464'FILE.sx'
1465     Assembler code that must be preprocessed.
1466
1467'OTHER'
1468     An object file to be fed straight into linking.  Any file name with
1469     no recognized suffix is treated this way.
1470
1471 You can specify the input language explicitly with the '-x' option:
1472
1473'-x LANGUAGE'
1474     Specify explicitly the LANGUAGE for the following input files
1475     (rather than letting the compiler choose a default based on the
1476     file name suffix).  This option applies to all following input
1477     files until the next '-x' option.  Possible values for LANGUAGE
1478     are:
1479          c  c-header  cpp-output
1480          c++  c++-header  c++-cpp-output
1481          objective-c  objective-c-header  objective-c-cpp-output
1482          objective-c++ objective-c++-header objective-c++-cpp-output
1483          assembler  assembler-with-cpp
1484          ada
1485          f77  f77-cpp-input f95  f95-cpp-input
1486          go
1487          java
1488
1489'-x none'
1490     Turn off any specification of a language, so that subsequent files
1491     are handled according to their file name suffixes (as they are if
1492     '-x' has not been used at all).
1493
1494'-pass-exit-codes'
1495     Normally the 'gcc' program exits with the code of 1 if any phase of
1496     the compiler returns a non-success return code.  If you specify
1497     '-pass-exit-codes', the 'gcc' program instead returns with the
1498     numerically highest error produced by any phase returning an error
1499     indication.  The C, C++, and Fortran front ends return 4 if an
1500     internal compiler error is encountered.
1501
1502 If you only want some of the stages of compilation, you can use '-x'
1503(or filename suffixes) to tell 'gcc' where to start, and one of the
1504options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1505some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1506nothing at all.
1507
1508'-c'
1509     Compile or assemble the source files, but do not link.  The linking
1510     stage simply is not done.  The ultimate output is in the form of an
1511     object file for each source file.
1512
1513     By default, the object file name for a source file is made by
1514     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1515
1516     Unrecognized input files, not requiring compilation or assembly,
1517     are ignored.
1518
1519'-S'
1520     Stop after the stage of compilation proper; do not assemble.  The
1521     output is in the form of an assembler code file for each
1522     non-assembler input file specified.
1523
1524     By default, the assembler file name for a source file is made by
1525     replacing the suffix '.c', '.i', etc., with '.s'.
1526
1527     Input files that don't require compilation are ignored.
1528
1529'-E'
1530     Stop after the preprocessing stage; do not run the compiler proper.
1531     The output is in the form of preprocessed source code, which is
1532     sent to the standard output.
1533
1534     Input files that don't require preprocessing are ignored.
1535
1536'-o FILE'
1537     Place output in file FILE.  This applies to whatever sort of output
1538     is being produced, whether it be an executable file, an object
1539     file, an assembler file or preprocessed C code.
1540
1541     If '-o' is not specified, the default is to put an executable file
1542     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1543     assembler file in 'SOURCE.s', a precompiled header file in
1544     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1545     output.
1546
1547'-v'
1548     Print (on standard error output) the commands executed to run the
1549     stages of compilation.  Also print the version number of the
1550     compiler driver program and of the preprocessor and the compiler
1551     proper.
1552
1553'-###'
1554     Like '-v' except the commands are not executed and arguments are
1555     quoted unless they contain only alphanumeric characters or './-_'.
1556     This is useful for shell scripts to capture the driver-generated
1557     command lines.
1558
1559'-pipe'
1560     Use pipes rather than temporary files for communication between the
1561     various stages of compilation.  This fails to work on some systems
1562     where the assembler is unable to read from a pipe; but the GNU
1563     assembler has no trouble.
1564
1565'--help'
1566     Print (on the standard output) a description of the command-line
1567     options understood by 'gcc'.  If the '-v' option is also specified
1568     then '--help' is also passed on to the various processes invoked by
1569     'gcc', so that they can display the command-line options they
1570     accept.  If the '-Wextra' option has also been specified (prior to
1571     the '--help' option), then command-line options that have no
1572     documentation associated with them are also displayed.
1573
1574'--target-help'
1575     Print (on the standard output) a description of target-specific
1576     command-line options for each tool.  For some targets extra
1577     target-specific information may also be printed.
1578
1579'--help={CLASS|[^]QUALIFIER}[,...]'
1580     Print (on the standard output) a description of the command-line
1581     options understood by the compiler that fit into all specified
1582     classes and qualifiers.  These are the supported classes:
1583
1584     'optimizers'
1585          Display all of the optimization options supported by the
1586          compiler.
1587
1588     'warnings'
1589          Display all of the options controlling warning messages
1590          produced by the compiler.
1591
1592     'target'
1593          Display target-specific options.  Unlike the '--target-help'
1594          option however, target-specific options of the linker and
1595          assembler are not displayed.  This is because those tools do
1596          not currently support the extended '--help=' syntax.
1597
1598     'params'
1599          Display the values recognized by the '--param' option.
1600
1601     LANGUAGE
1602          Display the options supported for LANGUAGE, where LANGUAGE is
1603          the name of one of the languages supported in this version of
1604          GCC.
1605
1606     'common'
1607          Display the options that are common to all languages.
1608
1609     These are the supported qualifiers:
1610
1611     'undocumented'
1612          Display only those options that are undocumented.
1613
1614     'joined'
1615          Display options taking an argument that appears after an equal
1616          sign in the same continuous piece of text, such as:
1617          '--help=target'.
1618
1619     'separate'
1620          Display options taking an argument that appears as a separate
1621          word following the original option, such as: '-o output-file'.
1622
1623     Thus for example to display all the undocumented target-specific
1624     switches supported by the compiler, use:
1625
1626          --help=target,undocumented
1627
1628     The sense of a qualifier can be inverted by prefixing it with the
1629     '^' character, so for example to display all binary warning options
1630     (i.e., ones that are either on or off and that do not take an
1631     argument) that have a description, use:
1632
1633          --help=warnings,^joined,^undocumented
1634
1635     The argument to '--help=' should not consist solely of inverted
1636     qualifiers.
1637
1638     Combining several classes is possible, although this usually
1639     restricts the output so much that there is nothing to display.  One
1640     case where it does work, however, is when one of the classes is
1641     TARGET.  For example, to display all the target-specific
1642     optimization options, use:
1643
1644          --help=target,optimizers
1645
1646     The '--help=' option can be repeated on the command line.  Each
1647     successive use displays its requested class of options, skipping
1648     those that have already been displayed.
1649
1650     If the '-Q' option appears on the command line before the '--help='
1651     option, then the descriptive text displayed by '--help=' is
1652     changed.  Instead of describing the displayed options, an
1653     indication is given as to whether the option is enabled, disabled
1654     or set to a specific value (assuming that the compiler knows this
1655     at the point where the '--help=' option is used).
1656
1657     Here is a truncated example from the ARM port of 'gcc':
1658
1659            % gcc -Q -mabi=2 --help=target -c
1660            The following options are target specific:
1661            -mabi=                                2
1662            -mabort-on-noreturn                   [disabled]
1663            -mapcs                                [disabled]
1664
1665     The output is sensitive to the effects of previous command-line
1666     options, so for example it is possible to find out which
1667     optimizations are enabled at '-O2' by using:
1668
1669          -Q -O2 --help=optimizers
1670
1671     Alternatively you can discover which binary optimizations are
1672     enabled by '-O3' by using:
1673
1674          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1675          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1676          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1677
1678'-no-canonical-prefixes'
1679     Do not expand any symbolic links, resolve references to '/../' or
1680     '/./', or make the path absolute when generating a relative prefix.
1681
1682'--version'
1683     Display the version number and copyrights of the invoked GCC.
1684
1685'-wrapper'
1686     Invoke all subcommands under a wrapper program.  The name of the
1687     wrapper program and its parameters are passed as a comma separated
1688     list.
1689
1690          gcc -c t.c -wrapper gdb,--args
1691
1692     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
1693     invocation of 'cc1' is 'gdb --args cc1 ...'.
1694
1695'-fplugin=NAME.so'
1696     Load the plugin code in file NAME.so, assumed to be a shared object
1697     to be dlopen'd by the compiler.  The base name of the shared object
1698     file is used to identify the plugin for the purposes of argument
1699     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
1700     should define the callback functions specified in the Plugins API.
1701
1702'-fplugin-arg-NAME-KEY=VALUE'
1703     Define an argument called KEY with a value of VALUE for the plugin
1704     called NAME.
1705
1706'-fdump-ada-spec[-slim]'
1707     For C and C++ source and include files, generate corresponding Ada
1708     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
1709     headers::, which provides detailed documentation on this feature.
1710
1711'-fada-spec-parent=UNIT'
1712     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
1713     specs as child units of parent UNIT.
1714
1715'-fdump-go-spec=FILE'
1716     For input files in any language, generate corresponding Go
1717     declarations in FILE.  This generates Go 'const', 'type', 'var',
1718     and 'func' declarations which may be a useful way to start writing
1719     a Go interface to code written in some other language.
1720
1721'@FILE'
1722     Read command-line options from FILE.  The options read are inserted
1723     in place of the original @FILE option.  If FILE does not exist, or
1724     cannot be read, then the option will be treated literally, and not
1725     removed.
1726
1727     Options in FILE are separated by whitespace.  A whitespace
1728     character may be included in an option by surrounding the entire
1729     option in either single or double quotes.  Any character (including
1730     a backslash) may be included by prefixing the character to be
1731     included with a backslash.  The FILE may itself contain additional
1732     @FILE options; any such options will be processed recursively.
1733
1734
1735File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1736
17373.3 Compiling C++ Programs
1738==========================
1739
1740C++ source files conventionally use one of the suffixes '.C', '.cc',
1741'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
1742'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
1743preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
1744these names and compiles them as C++ programs even if you call the
1745compiler the same way as for compiling C programs (usually with the name
1746'gcc').
1747
1748 However, the use of 'gcc' does not add the C++ library.  'g++' is a
1749program that calls GCC and automatically specifies linking against the
1750C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
1751instead of C source files unless '-x' is used.  This program is also
1752useful when precompiling a C header file with a '.h' extension for use
1753in C++ compilations.  On many systems, 'g++' is also installed with the
1754name 'c++'.
1755
1756 When you compile C++ programs, you may specify many of the same
1757command-line options that you use for compiling programs in any
1758language; or command-line options meaningful for C and related
1759languages; or options that are meaningful only for C++ programs.  *Note
1760Options Controlling C Dialect: C Dialect Options, for explanations of
1761options for languages related to C.  *Note Options Controlling C++
1762Dialect: C++ Dialect Options, for explanations of options that are
1763meaningful only for C++ programs.
1764
1765
1766File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1767
17683.4 Options Controlling C Dialect
1769=================================
1770
1771The following options control the dialect of C (or languages derived
1772from C, such as C++, Objective-C and Objective-C++) that the compiler
1773accepts:
1774
1775'-ansi'
1776     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
1777     equivalent to '-std=c++98'.
1778
1779     This turns off certain features of GCC that are incompatible with
1780     ISO C90 (when compiling C code), or of standard C++ (when compiling
1781     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
1782     macros such as 'unix' and 'vax' that identify the type of system
1783     you are using.  It also enables the undesirable and rarely used ISO
1784     trigraph feature.  For the C compiler, it disables recognition of
1785     C++ style '//' comments as well as the 'inline' keyword.
1786
1787     The alternate keywords '__asm__', '__extension__', '__inline__' and
1788     '__typeof__' continue to work despite '-ansi'.  You would not want
1789     to use them in an ISO C program, of course, but it is useful to put
1790     them in header files that might be included in compilations done
1791     with '-ansi'.  Alternate predefined macros such as '__unix__' and
1792     '__vax__' are also available, with or without '-ansi'.
1793
1794     The '-ansi' option does not cause non-ISO programs to be rejected
1795     gratuitously.  For that, '-Wpedantic' is required in addition to
1796     '-ansi'.  *Note Warning Options::.
1797
1798     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
1799     is used.  Some header files may notice this macro and refrain from
1800     declaring certain functions or defining certain macros that the ISO
1801     standard doesn't call for; this is to avoid interfering with any
1802     programs that might use these names for other things.
1803
1804     Functions that are normally built in but do not have semantics
1805     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
1806     functions when '-ansi' is used.  *Note Other built-in functions
1807     provided by GCC: Other Builtins, for details of the functions
1808     affected.
1809
1810'-std='
1811     Determine the language standard.  *Note Language Standards
1812     Supported by GCC: Standards, for details of these standard
1813     versions.  This option is currently only supported when compiling C
1814     or C++.
1815
1816     The compiler can accept several base standards, such as 'c90' or
1817     'c++98', and GNU dialects of those standards, such as 'gnu90' or
1818     'gnu++98'.  When a base standard is specified, the compiler accepts
1819     all programs following that standard plus those using GNU
1820     extensions that do not contradict it.  For example, '-std=c90'
1821     turns off certain features of GCC that are incompatible with ISO
1822     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
1823     extensions that do not have a meaning in ISO C90, such as omitting
1824     the middle term of a '?:' expression.  On the other hand, when a
1825     GNU dialect of a standard is specified, all features supported by
1826     the compiler are enabled, even when those features change the
1827     meaning of the base standard.  As a result, some strict-conforming
1828     programs may be rejected.  The particular standard is used by
1829     '-Wpedantic' to identify which features are GNU extensions given
1830     that version of the standard.  For example '-std=gnu90 -Wpedantic'
1831     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
1832     does not.
1833
1834     A value for this option must be provided; possible values are
1835
1836     'c90'
1837     'c89'
1838     'iso9899:1990'
1839          Support all ISO C90 programs (certain GNU extensions that
1840          conflict with ISO C90 are disabled).  Same as '-ansi' for C
1841          code.
1842
1843     'iso9899:199409'
1844          ISO C90 as modified in amendment 1.
1845
1846     'c99'
1847     'c9x'
1848     'iso9899:1999'
1849     'iso9899:199x'
1850          ISO C99.  Note that this standard is not yet fully supported;
1851          see <http://gcc.gnu.org/c99status.html> for more information.
1852          The names 'c9x' and 'iso9899:199x' are deprecated.
1853
1854     'c11'
1855     'c1x'
1856     'iso9899:2011'
1857          ISO C11, the 2011 revision of the ISO C standard.  Support is
1858          incomplete and experimental.  The name 'c1x' is deprecated.
1859
1860     'gnu90'
1861     'gnu89'
1862          GNU dialect of ISO C90 (including some C99 features).  This is
1863          the default for C code.
1864
1865     'gnu99'
1866     'gnu9x'
1867          GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1868          GCC, this will become the default.  The name 'gnu9x' is
1869          deprecated.
1870
1871     'gnu11'
1872     'gnu1x'
1873          GNU dialect of ISO C11.  Support is incomplete and
1874          experimental.  The name 'gnu1x' is deprecated.
1875
1876     'c++98'
1877     'c++03'
1878          The 1998 ISO C++ standard plus the 2003 technical corrigendum
1879          and some additional defect reports.  Same as '-ansi' for C++
1880          code.
1881
1882     'gnu++98'
1883     'gnu++03'
1884          GNU dialect of '-std=c++98'.  This is the default for C++
1885          code.
1886
1887     'c++11'
1888     'c++0x'
1889          The 2011 ISO C++ standard plus amendments.  Support for C++11
1890          is still experimental, and may change in incompatible ways in
1891          future releases.  The name 'c++0x' is deprecated.
1892
1893     'gnu++11'
1894     'gnu++0x'
1895          GNU dialect of '-std=c++11'.  Support for C++11 is still
1896          experimental, and may change in incompatible ways in future
1897          releases.  The name 'gnu++0x' is deprecated.
1898
1899     'c++1y'
1900          The next revision of the ISO C++ standard, tentatively planned
1901          for 2017.  Support is highly experimental, and will almost
1902          certainly change in incompatible ways in future releases.
1903
1904     'gnu++1y'
1905          GNU dialect of '-std=c++1y'.  Support is highly experimental,
1906          and will almost certainly change in incompatible ways in
1907          future releases.
1908
1909'-fgnu89-inline'
1910     The option '-fgnu89-inline' tells GCC to use the traditional GNU
1911     semantics for 'inline' functions when in C99 mode.  *Note An Inline
1912     Function is As Fast As a Macro: Inline.  This option is accepted
1913     and ignored by GCC versions 4.1.3 up to but not including 4.3.  In
1914     GCC versions 4.3 and later it changes the behavior of GCC in C99
1915     mode.  Using this option is roughly equivalent to adding the
1916     'gnu_inline' function attribute to all inline functions (*note
1917     Function Attributes::).
1918
1919     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
1920     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
1921     specifies the default behavior).  This option was first supported
1922     in GCC 4.3.  This option is not supported in '-std=c90' or
1923     '-std=gnu90' mode.
1924
1925     The preprocessor macros '__GNUC_GNU_INLINE__' and
1926     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
1927     effect for 'inline' functions.  *Note (cpp)Common Predefined
1928     Macros::.
1929
1930'-aux-info FILENAME'
1931     Output to the given filename prototyped declarations for all
1932     functions declared and/or defined in a translation unit, including
1933     those in header files.  This option is silently ignored in any
1934     language other than C.
1935
1936     Besides declarations, the file indicates, in comments, the origin
1937     of each declaration (source file and line), whether the declaration
1938     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
1939     for old, respectively, in the first character after the line number
1940     and the colon), and whether it came from a declaration or a
1941     definition ('C' or 'F', respectively, in the following character).
1942     In the case of function definitions, a K&R-style list of arguments
1943     followed by their declarations is also provided, inside comments,
1944     after the declaration.
1945
1946'-fallow-parameterless-variadic-functions'
1947     Accept variadic functions without named parameters.
1948
1949     Although it is possible to define such a function, this is not very
1950     useful as it is not possible to read the arguments.  This is only
1951     supported for C as this construct is allowed by C++.
1952
1953'-fno-asm'
1954     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
1955     code can use these words as identifiers.  You can use the keywords
1956     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
1957     '-fno-asm'.
1958
1959     In C++, this switch only affects the 'typeof' keyword, since 'asm'
1960     and 'inline' are standard keywords.  You may want to use the
1961     '-fno-gnu-keywords' flag instead, which has the same effect.  In
1962     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
1963     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
1964     in ISO C99.
1965
1966'-fno-builtin'
1967'-fno-builtin-FUNCTION'
1968     Don't recognize built-in functions that do not begin with
1969     '__builtin_' as prefix.  *Note Other built-in functions provided by
1970     GCC: Other Builtins, for details of the functions affected,
1971     including those which are not built-in functions when '-ansi' or
1972     '-std' options for strict ISO C conformance are used because they
1973     do not have an ISO standard meaning.
1974
1975     GCC normally generates special code to handle certain built-in
1976     functions more efficiently; for instance, calls to 'alloca' may
1977     become single instructions which adjust the stack directly, and
1978     calls to 'memcpy' may become inline copy loops.  The resulting code
1979     is often both smaller and faster, but since the function calls no
1980     longer appear as such, you cannot set a breakpoint on those calls,
1981     nor can you change the behavior of the functions by linking with a
1982     different library.  In addition, when a function is recognized as a
1983     built-in function, GCC may use information about that function to
1984     warn about problems with calls to that function, or to generate
1985     more efficient code, even if the resulting code still contains
1986     calls to that function.  For example, warnings are given with
1987     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
1988     'strlen' is known not to modify global memory.
1989
1990     With the '-fno-builtin-FUNCTION' option only the built-in function
1991     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
1992     If a function is named that is not built-in in this version of GCC,
1993     this option is ignored.  There is no corresponding
1994     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
1995     functions selectively when using '-fno-builtin' or
1996     '-ffreestanding', you may define macros such as:
1997
1998          #define abs(n)          __builtin_abs ((n))
1999          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2000
2001'-fhosted'
2002
2003     Assert that compilation targets a hosted environment.  This implies
2004     '-fbuiltin'.  A hosted environment is one in which the entire
2005     standard library is available, and in which 'main' has a return
2006     type of 'int'.  Examples are nearly everything except a kernel.
2007     This is equivalent to '-fno-freestanding'.
2008
2009'-ffreestanding'
2010
2011     Assert that compilation targets a freestanding environment.  This
2012     implies '-fno-builtin'.  A freestanding environment is one in which
2013     the standard library may not exist, and program startup may not
2014     necessarily be at 'main'.  The most obvious example is an OS
2015     kernel.  This is equivalent to '-fno-hosted'.
2016
2017     *Note Language Standards Supported by GCC: Standards, for details
2018     of freestanding and hosted environments.
2019
2020'-fopenmp'
2021     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2022     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2023     generates parallel code according to the OpenMP Application Program
2024     Interface v3.0 <http://www.openmp.org/>.  This option implies
2025     '-pthread', and thus is only supported on targets that have support
2026     for '-pthread'.
2027
2028'-fgnu-tm'
2029     When the option '-fgnu-tm' is specified, the compiler generates
2030     code for the Linux variant of Intel's current Transactional Memory
2031     ABI specification document (Revision 1.1, May 6 2009).  This is an
2032     experimental feature whose interface may change in future versions
2033     of GCC, as the official specification changes.  Please note that
2034     not all architectures are supported for this feature.
2035
2036     For more information on GCC's support for transactional memory,
2037     *Note The GNU Transactional Memory Library: (libitm)Enabling
2038     libitm.
2039
2040     Note that the transactional memory feature is not supported with
2041     non-call exceptions ('-fnon-call-exceptions').
2042
2043'-fms-extensions'
2044     Accept some non-standard constructs used in Microsoft header files.
2045
2046     In C++ code, this allows member names in structures to be similar
2047     to previous types declarations.
2048
2049          typedef int UOW;
2050          struct ABC {
2051            UOW UOW;
2052          };
2053
2054     Some cases of unnamed fields in structures and unions are only
2055     accepted with this option.  *Note Unnamed struct/union fields
2056     within structs/unions: Unnamed Fields, for details.
2057
2058'-fplan9-extensions'
2059     Accept some non-standard constructs used in Plan 9 code.
2060
2061     This enables '-fms-extensions', permits passing pointers to
2062     structures with anonymous fields to functions that expect pointers
2063     to elements of the type of the field, and permits referring to
2064     anonymous fields declared using a typedef.  *Note Unnamed
2065     struct/union fields within structs/unions: Unnamed Fields, for
2066     details.  This is only supported for C, not C++.
2067
2068'-trigraphs'
2069     Support ISO C trigraphs.  The '-ansi' option (and '-std' options
2070     for strict ISO C conformance) implies '-trigraphs'.
2071
2072'-traditional'
2073'-traditional-cpp'
2074     Formerly, these options caused GCC to attempt to emulate a
2075     pre-standard C compiler.  They are now only supported with the '-E'
2076     switch.  The preprocessor continues to support a pre-standard mode.
2077     See the GNU CPP manual for details.
2078
2079'-fcond-mismatch'
2080     Allow conditional expressions with mismatched types in the second
2081     and third arguments.  The value of such an expression is void.
2082     This option is not supported for C++.
2083
2084'-flax-vector-conversions'
2085     Allow implicit conversions between vectors with differing numbers
2086     of elements and/or incompatible element types.  This option should
2087     not be used for new code.
2088
2089'-funsigned-char'
2090     Let the type 'char' be unsigned, like 'unsigned char'.
2091
2092     Each kind of machine has a default for what 'char' should be.  It
2093     is either like 'unsigned char' by default or like 'signed char' by
2094     default.
2095
2096     Ideally, a portable program should always use 'signed char' or
2097     'unsigned char' when it depends on the signedness of an object.
2098     But many programs have been written to use plain 'char' and expect
2099     it to be signed, or expect it to be unsigned, depending on the
2100     machines they were written for.  This option, and its inverse, let
2101     you make such a program work with the opposite default.
2102
2103     The type 'char' is always a distinct type from each of 'signed
2104     char' or 'unsigned char', even though its behavior is always just
2105     like one of those two.
2106
2107'-fsigned-char'
2108     Let the type 'char' be signed, like 'signed char'.
2109
2110     Note that this is equivalent to '-fno-unsigned-char', which is the
2111     negative form of '-funsigned-char'.  Likewise, the option
2112     '-fno-signed-char' is equivalent to '-funsigned-char'.
2113
2114'-fsigned-bitfields'
2115'-funsigned-bitfields'
2116'-fno-signed-bitfields'
2117'-fno-unsigned-bitfields'
2118     These options control whether a bit-field is signed or unsigned,
2119     when the declaration does not use either 'signed' or 'unsigned'.
2120     By default, such a bit-field is signed, because this is consistent:
2121     the basic integer types such as 'int' are signed types.
2122
2123
2124File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2125
21263.5 Options Controlling C++ Dialect
2127===================================
2128
2129This section describes the command-line options that are only meaningful
2130for C++ programs.  You can also use most of the GNU compiler options
2131regardless of what language your program is in.  For example, you might
2132compile a file 'firstClass.C' like this:
2133
2134     g++ -g -frepo -O -c firstClass.C
2135
2136In this example, only '-frepo' is an option meant only for C++ programs;
2137you can use the other options with any language supported by GCC.
2138
2139 Here is a list of options that are _only_ for compiling C++ programs:
2140
2141'-fabi-version=N'
2142     Use version N of the C++ ABI.  The default is version 2.
2143
2144     Version 0 refers to the version conforming most closely to the C++
2145     ABI specification.  Therefore, the ABI obtained using version 0
2146     will change in different versions of G++ as ABI bugs are fixed.
2147
2148     Version 1 is the version of the C++ ABI that first appeared in G++
2149     3.2.
2150
2151     Version 2 is the version of the C++ ABI that first appeared in G++
2152     3.4.
2153
2154     Version 3 corrects an error in mangling a constant address as a
2155     template argument.
2156
2157     Version 4, which first appeared in G++ 4.5, implements a standard
2158     mangling for vector types.
2159
2160     Version 5, which first appeared in G++ 4.6, corrects the mangling
2161     of attribute const/volatile on function pointer types, decltype of
2162     a plain decl, and use of a function parameter in the declaration of
2163     another parameter.
2164
2165     Version 6, which first appeared in G++ 4.7, corrects the promotion
2166     behavior of C++11 scoped enums and the mangling of template
2167     argument packs, const/static_cast, prefix ++ and -, and a class
2168     scope function used as a template argument.
2169
2170     See also '-Wabi'.
2171
2172'-fno-access-control'
2173     Turn off all access checking.  This switch is mainly useful for
2174     working around bugs in the access control code.
2175
2176'-fcheck-new'
2177     Check that the pointer returned by 'operator new' is non-null
2178     before attempting to modify the storage allocated.  This check is
2179     normally unnecessary because the C++ standard specifies that
2180     'operator new' only returns '0' if it is declared 'throw()', in
2181     which case the compiler always checks the return value even without
2182     this option.  In all other cases, when 'operator new' has a
2183     non-empty exception specification, memory exhaustion is signalled
2184     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2185
2186'-fconstexpr-depth=N'
2187     Set the maximum nested evaluation depth for C++11 constexpr
2188     functions to N.  A limit is needed to detect endless recursion
2189     during constant expression evaluation.  The minimum specified by
2190     the standard is 512.
2191
2192'-fdeduce-init-list'
2193     Enable deduction of a template type parameter as
2194     'std::initializer_list' from a brace-enclosed initializer list,
2195     i.e.
2196
2197          template <class T> auto forward(T t) -> decltype (realfn (t))
2198          {
2199            return realfn (t);
2200          }
2201
2202          void f()
2203          {
2204            forward({1,2}); // call forward<std::initializer_list<int>>
2205          }
2206
2207     This deduction was implemented as a possible extension to the
2208     originally proposed semantics for the C++11 standard, but was not
2209     part of the final standard, so it is disabled by default.  This
2210     option is deprecated, and may be removed in a future version of
2211     G++.
2212
2213'-ffriend-injection'
2214     Inject friend functions into the enclosing namespace, so that they
2215     are visible outside the scope of the class in which they are
2216     declared.  Friend functions were documented to work this way in the
2217     old Annotated C++ Reference Manual, and versions of G++ before 4.1
2218     always worked that way.  However, in ISO C++ a friend function that
2219     is not declared in an enclosing scope can only be found using
2220     argument dependent lookup.  This option causes friends to be
2221     injected as they were in earlier releases.
2222
2223     This option is for compatibility, and may be removed in a future
2224     release of G++.
2225
2226'-fno-elide-constructors'
2227     The C++ standard allows an implementation to omit creating a
2228     temporary that is only used to initialize another object of the
2229     same type.  Specifying this option disables that optimization, and
2230     forces G++ to call the copy constructor in all cases.
2231
2232'-fno-enforce-eh-specs'
2233     Don't generate code to check for violation of exception
2234     specifications at run time.  This option violates the C++ standard,
2235     but may be useful for reducing code size in production builds, much
2236     like defining 'NDEBUG'.  This does not give user code permission to
2237     throw exceptions in violation of the exception specifications; the
2238     compiler still optimizes based on the specifications, so throwing
2239     an unexpected exception results in undefined behavior at run time.
2240
2241'-fextern-tls-init'
2242'-fno-extern-tls-init'
2243     The C++11 and OpenMP standards allow 'thread_local' and
2244     'threadprivate' variables to have dynamic (runtime) initialization.
2245     To support this, any use of such a variable goes through a wrapper
2246     function that performs any necessary initialization.  When the use
2247     and definition of the variable are in the same translation unit,
2248     this overhead can be optimized away, but when the use is in a
2249     different translation unit there is significant overhead even if
2250     the variable doesn't actually need dynamic initialization.  If the
2251     programmer can be sure that no use of the variable in a
2252     non-defining TU needs to trigger dynamic initialization (either
2253     because the variable is statically initialized, or a use of the
2254     variable in the defining TU will be executed before any uses in
2255     another TU), they can avoid this overhead with the
2256     '-fno-extern-tls-init' option.
2257
2258     On targets that support symbol aliases, the default is
2259     '-fextern-tls-init'.  On targets that do not support symbol
2260     aliases, the default is '-fno-extern-tls-init'.
2261
2262'-ffor-scope'
2263'-fno-for-scope'
2264     If '-ffor-scope' is specified, the scope of variables declared in a
2265     for-init-statement is limited to the 'for' loop itself, as
2266     specified by the C++ standard.  If '-fno-for-scope' is specified,
2267     the scope of variables declared in a for-init-statement extends to
2268     the end of the enclosing scope, as was the case in old versions of
2269     G++, and other (traditional) implementations of C++.
2270
2271     If neither flag is given, the default is to follow the standard,
2272     but to allow and give a warning for old-style code that would
2273     otherwise be invalid, or have different behavior.
2274
2275'-fno-gnu-keywords'
2276     Do not recognize 'typeof' as a keyword, so that code can use this
2277     word as an identifier.  You can use the keyword '__typeof__'
2278     instead.  '-ansi' implies '-fno-gnu-keywords'.
2279
2280'-fno-implicit-templates'
2281     Never emit code for non-inline templates that are instantiated
2282     implicitly (i.e. by use); only emit code for explicit
2283     instantiations.  *Note Template Instantiation::, for more
2284     information.
2285
2286'-fno-implicit-inline-templates'
2287     Don't emit code for implicit instantiations of inline templates,
2288     either.  The default is to handle inlines differently so that
2289     compiles with and without optimization need the same set of
2290     explicit instantiations.
2291
2292'-fno-implement-inlines'
2293     To save space, do not emit out-of-line copies of inline functions
2294     controlled by '#pragma implementation'.  This causes linker errors
2295     if these functions are not inlined everywhere they are called.
2296
2297'-fms-extensions'
2298     Disable Wpedantic warnings about constructs used in MFC, such as
2299     implicit int and getting a pointer to member function via
2300     non-standard syntax.
2301
2302'-fno-nonansi-builtins'
2303     Disable built-in declarations of functions that are not mandated by
2304     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2305     'bzero', 'conjf', and other related functions.
2306
2307'-fnothrow-opt'
2308     Treat a 'throw()' exception specification as if it were a
2309     'noexcept' specification to reduce or eliminate the text size
2310     overhead relative to a function with no exception specification.
2311     If the function has local variables of types with non-trivial
2312     destructors, the exception specification actually makes the
2313     function smaller because the EH cleanups for those variables can be
2314     optimized away.  The semantic effect is that an exception thrown
2315     out of a function with such an exception specification results in a
2316     call to 'terminate' rather than 'unexpected'.
2317
2318'-fno-operator-names'
2319     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2320     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2321
2322'-fno-optional-diags'
2323     Disable diagnostics that the standard says a compiler does not need
2324     to issue.  Currently, the only such diagnostic issued by G++ is the
2325     one for a name having multiple meanings within a class.
2326
2327'-fpermissive'
2328     Downgrade some diagnostics about nonconformant code from errors to
2329     warnings.  Thus, using '-fpermissive' allows some nonconforming
2330     code to compile.
2331
2332'-fno-pretty-templates'
2333     When an error message refers to a specialization of a function
2334     template, the compiler normally prints the signature of the
2335     template followed by the template arguments and any typedefs or
2336     typenames in the signature (e.g.  'void f(T) [with T = int]' rather
2337     than 'void f(int)') so that it's clear which template is involved.
2338     When an error message refers to a specialization of a class
2339     template, the compiler omits any template arguments that match the
2340     default template arguments for that template.  If either of these
2341     behaviors make it harder to understand the error message rather
2342     than easier, you can use '-fno-pretty-templates' to disable them.
2343
2344'-frepo'
2345     Enable automatic template instantiation at link time.  This option
2346     also implies '-fno-implicit-templates'.  *Note Template
2347     Instantiation::, for more information.
2348
2349'-fno-rtti'
2350     Disable generation of information about every class with virtual
2351     functions for use by the C++ run-time type identification features
2352     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2353     language, you can save some space by using this flag.  Note that
2354     exception handling uses the same information, but G++ generates it
2355     as needed.  The 'dynamic_cast' operator can still be used for casts
2356     that do not require run-time type information, i.e. casts to 'void
2357     *' or to unambiguous base classes.
2358
2359'-fstats'
2360     Emit statistics about front-end processing at the end of the
2361     compilation.  This information is generally only useful to the G++
2362     development team.
2363
2364'-fstrict-enums'
2365     Allow the compiler to optimize using the assumption that a value of
2366     enumerated type can only be one of the values of the enumeration
2367     (as defined in the C++ standard; basically, a value that can be
2368     represented in the minimum number of bits needed to represent all
2369     the enumerators).  This assumption may not be valid if the program
2370     uses a cast to convert an arbitrary integer value to the enumerated
2371     type.
2372
2373'-ftemplate-backtrace-limit=N'
2374     Set the maximum number of template instantiation notes for a single
2375     warning or error to N.  The default value is 10.
2376
2377'-ftemplate-depth=N'
2378     Set the maximum instantiation depth for template classes to N.  A
2379     limit on the template instantiation depth is needed to detect
2380     endless recursions during template class instantiation.  ANSI/ISO
2381     C++ conforming programs must not rely on a maximum depth greater
2382     than 17 (changed to 1024 in C++11).  The default value is 900, as
2383     the compiler can run out of stack space before hitting 1024 in some
2384     situations.
2385
2386'-fno-threadsafe-statics'
2387     Do not emit the extra code to use the routines specified in the C++
2388     ABI for thread-safe initialization of local statics.  You can use
2389     this option to reduce code size slightly in code that doesn't need
2390     to be thread-safe.
2391
2392'-fuse-cxa-atexit'
2393     Register destructors for objects with static storage duration with
2394     the '__cxa_atexit' function rather than the 'atexit' function.
2395     This option is required for fully standards-compliant handling of
2396     static destructors, but only works if your C library supports
2397     '__cxa_atexit'.
2398
2399'-fno-use-cxa-get-exception-ptr'
2400     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
2401     causes 'std::uncaught_exception' to be incorrect, but is necessary
2402     if the runtime routine is not available.
2403
2404'-fvisibility-inlines-hidden'
2405     This switch declares that the user does not attempt to compare
2406     pointers to inline functions or methods where the addresses of the
2407     two functions are taken in different shared objects.
2408
2409     The effect of this is that GCC may, effectively, mark inline
2410     methods with '__attribute__ ((visibility ("hidden")))' so that they
2411     do not appear in the export table of a DSO and do not require a PLT
2412     indirection when used within the DSO.  Enabling this option can
2413     have a dramatic effect on load and link times of a DSO as it
2414     massively reduces the size of the dynamic export table when the
2415     library makes heavy use of templates.
2416
2417     The behavior of this switch is not quite the same as marking the
2418     methods as hidden directly, because it does not affect static
2419     variables local to the function or cause the compiler to deduce
2420     that the function is defined in only one shared object.
2421
2422     You may mark a method as having a visibility explicitly to negate
2423     the effect of the switch for that method.  For example, if you do
2424     want to compare pointers to a particular inline method, you might
2425     mark it as having default visibility.  Marking the enclosing class
2426     with explicit visibility has no effect.
2427
2428     Explicitly instantiated inline methods are unaffected by this
2429     option as their linkage might otherwise cross a shared library
2430     boundary.  *Note Template Instantiation::.
2431
2432'-fvisibility-ms-compat'
2433     This flag attempts to use visibility settings to make GCC's C++
2434     linkage model compatible with that of Microsoft Visual Studio.
2435
2436     The flag makes these changes to GCC's linkage model:
2437
2438       1. It sets the default visibility to 'hidden', like
2439          '-fvisibility=hidden'.
2440
2441       2. Types, but not their members, are not hidden by default.
2442
2443       3. The One Definition Rule is relaxed for types without explicit
2444          visibility specifications that are defined in more than one
2445          shared object: those declarations are permitted if they are
2446          permitted when this option is not used.
2447
2448     In new code it is better to use '-fvisibility=hidden' and export
2449     those classes that are intended to be externally visible.
2450     Unfortunately it is possible for code to rely, perhaps
2451     accidentally, on the Visual Studio behavior.
2452
2453     Among the consequences of these changes are that static data
2454     members of the same type with the same name but defined in
2455     different shared objects are different, so changing one does not
2456     change the other; and that pointers to function members defined in
2457     different shared objects may not compare equal.  When this flag is
2458     given, it is a violation of the ODR to define types with the same
2459     name differently.
2460
2461'-fno-weak'
2462     Do not use weak symbol support, even if it is provided by the
2463     linker.  By default, G++ uses weak symbols if they are available.
2464     This option exists only for testing, and should not be used by
2465     end-users; it results in inferior code and has no benefits.  This
2466     option may be removed in a future release of G++.
2467
2468'-nostdinc++'
2469     Do not search for header files in the standard directories specific
2470     to C++, but do still search the other standard directories.  (This
2471     option is used when building the C++ library.)
2472
2473 In addition, these optimization, warning, and code generation options
2474have meanings only for C++ programs:
2475
2476'-fno-default-inline'
2477     Do not assume 'inline' for functions defined inside a class scope.
2478     *Note Options That Control Optimization: Optimize Options.  Note
2479     that these functions have linkage like inline functions; they just
2480     aren't inlined by default.
2481
2482'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2483     Warn when G++ generates code that is probably not compatible with
2484     the vendor-neutral C++ ABI.  Although an effort has been made to
2485     warn about all such cases, there are probably some cases that are
2486     not warned about, even though G++ is generating incompatible code.
2487     There may also be cases where warnings are emitted even though the
2488     code that is generated is compatible.
2489
2490     You should rewrite your code to avoid these warnings if you are
2491     concerned about the fact that code generated by G++ may not be
2492     binary compatible with code generated by other compilers.
2493
2494     The known incompatibilities in '-fabi-version=2' (the default)
2495     include:
2496
2497        * A template with a non-type template parameter of reference
2498          type is mangled incorrectly:
2499               extern int N;
2500               template <int &> struct S {};
2501               void n (S<N>) {2}
2502
2503          This is fixed in '-fabi-version=3'.
2504
2505        * SIMD vector types declared using '__attribute ((vector_size))'
2506          are mangled in a non-standard way that does not allow for
2507          overloading of functions taking vectors of different sizes.
2508
2509          The mangling is changed in '-fabi-version=4'.
2510
2511     The known incompatibilities in '-fabi-version=1' include:
2512
2513        * Incorrect handling of tail-padding for bit-fields.  G++ may
2514          attempt to pack data into the same byte as a base class.  For
2515          example:
2516
2517               struct A { virtual void f(); int f1 : 1; };
2518               struct B : public A { int f2 : 1; };
2519
2520          In this case, G++ places 'B::f2' into the same byte as
2521          'A::f1'; other compilers do not.  You can avoid this problem
2522          by explicitly padding 'A' so that its size is a multiple of
2523          the byte size on your platform; that causes G++ and other
2524          compilers to lay out 'B' identically.
2525
2526        * Incorrect handling of tail-padding for virtual bases.  G++
2527          does not use tail padding when laying out virtual bases.  For
2528          example:
2529
2530               struct A { virtual void f(); char c1; };
2531               struct B { B(); char c2; };
2532               struct C : public A, public virtual B {};
2533
2534          In this case, G++ does not place 'B' into the tail-padding for
2535          'A'; other compilers do.  You can avoid this problem by
2536          explicitly padding 'A' so that its size is a multiple of its
2537          alignment (ignoring virtual base classes); that causes G++ and
2538          other compilers to lay out 'C' identically.
2539
2540        * Incorrect handling of bit-fields with declared widths greater
2541          than that of their underlying types, when the bit-fields
2542          appear in a union.  For example:
2543
2544               union U { int i : 4096; };
2545
2546          Assuming that an 'int' does not have 4096 bits, G++ makes the
2547          union too small by the number of bits in an 'int'.
2548
2549        * Empty classes can be placed at incorrect offsets.  For
2550          example:
2551
2552               struct A {};
2553
2554               struct B {
2555                 A a;
2556                 virtual void f ();
2557               };
2558
2559               struct C : public B, public A {};
2560
2561          G++ places the 'A' base class of 'C' at a nonzero offset; it
2562          should be placed at offset zero.  G++ mistakenly believes that
2563          the 'A' data member of 'B' is already at offset zero.
2564
2565        * Names of template functions whose types involve 'typename' or
2566          template template parameters can be mangled incorrectly.
2567
2568               template <typename Q>
2569               void f(typename Q::X) {}
2570
2571               template <template <typename> class Q>
2572               void f(typename Q<int>::X) {}
2573
2574          Instantiations of these templates may be mangled incorrectly.
2575
2576     It also warns about psABI-related changes.  The known psABI changes
2577     at this point include:
2578
2579        * For SysV/x86-64, unions with 'long double' members are passed
2580          in memory as specified in psABI. For example:
2581
2582               union U {
2583                 long double ld;
2584                 int i;
2585               };
2586
2587          'union U' is always passed in memory.
2588
2589'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2590     Warn when a class seems unusable because all the constructors or
2591     destructors in that class are private, and it has neither friends
2592     nor public static member functions.  Also warn if there are no
2593     non-private methods, and there's at least one private member
2594     function that isn't a constructor or destructor.
2595
2596'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2597     Warn when 'delete' is used to destroy an instance of a class that
2598     has virtual functions and non-virtual destructor.  It is unsafe to
2599     delete an instance of a derived class through a pointer to a base
2600     class if the base class does not have a virtual destructor.  This
2601     warning is enabled by '-Wall'.
2602
2603'-Wliteral-suffix (C++ and Objective-C++ only)'
2604     Warn when a string or character literal is followed by a ud-suffix
2605     which does not begin with an underscore.  As a conforming
2606     extension, GCC treats such suffixes as separate preprocessing
2607     tokens in order to maintain backwards compatibility with code that
2608     uses formatting macros from '<inttypes.h>'.  For example:
2609
2610          #define __STDC_FORMAT_MACROS
2611          #include <inttypes.h>
2612          #include <stdio.h>
2613
2614          int main() {
2615            int64_t i64 = 123;
2616            printf("My int64: %"PRId64"\n", i64);
2617          }
2618
2619     In this case, 'PRId64' is treated as a separate preprocessing
2620     token.
2621
2622     This warning is enabled by default.
2623
2624'-Wnarrowing (C++ and Objective-C++ only)'
2625     Warn when a narrowing conversion prohibited by C++11 occurs within
2626     '{ }', e.g.
2627
2628          int i = { 2.2 }; // error: narrowing from double to int
2629
2630     This flag is included in '-Wall' and '-Wc++11-compat'.
2631
2632     With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic
2633     required by the standard.  Note that this does not affect the
2634     meaning of well-formed code; narrowing conversions are still
2635     considered ill-formed in SFINAE context.
2636
2637'-Wnoexcept (C++ and Objective-C++ only)'
2638     Warn when a noexcept-expression evaluates to false because of a
2639     call to a function that does not have a non-throwing exception
2640     specification (i.e.  'throw()' or 'noexcept') but is known by the
2641     compiler to never throw an exception.
2642
2643'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2644     Warn when a class has virtual functions and an accessible
2645     non-virtual destructor, in which case it is possible but unsafe to
2646     delete an instance of a derived class through a pointer to the base
2647     class.  This warning is also enabled if '-Weffc++' is specified.
2648
2649'-Wreorder (C++ and Objective-C++ only)'
2650     Warn when the order of member initializers given in the code does
2651     not match the order in which they must be executed.  For instance:
2652
2653          struct A {
2654            int i;
2655            int j;
2656            A(): j (0), i (1) { }
2657          };
2658
2659     The compiler rearranges the member initializers for 'i' and 'j' to
2660     match the declaration order of the members, emitting a warning to
2661     that effect.  This warning is enabled by '-Wall'.
2662
2663'-fext-numeric-literals (C++ and Objective-C++ only)'
2664     Accept imaginary, fixed-point, or machine-defined literal number
2665     suffixes as GNU extensions.  When this option is turned off these
2666     suffixes are treated as C++11 user-defined literal numeric
2667     suffixes.  This is on by default for all pre-C++11 dialects and all
2668     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
2669     '-std=gnu++1y'.  This option is off by default for ISO C++11
2670     onwards ('-std=c++11', ...).
2671
2672 The following '-W...' options are not affected by '-Wall'.
2673
2674'-Weffc++ (C++ and Objective-C++ only)'
2675     Warn about violations of the following style guidelines from Scott
2676     Meyers' 'Effective C++, Second Edition' book:
2677
2678        * Item 11: Define a copy constructor and an assignment operator
2679          for classes with dynamically-allocated memory.
2680
2681        * Item 12: Prefer initialization to assignment in constructors.
2682
2683        * Item 14: Make destructors virtual in base classes.
2684
2685        * Item 15: Have 'operator=' return a reference to '*this'.
2686
2687        * Item 23: Don't try to return a reference when you must return
2688          an object.
2689
2690     Also warn about violations of the following style guidelines from
2691     Scott Meyers' 'More Effective C++' book:
2692
2693        * Item 6: Distinguish between prefix and postfix forms of
2694          increment and decrement operators.
2695
2696        * Item 7: Never overload '&&', '||', or ','.
2697
2698     When selecting this option, be aware that the standard library
2699     headers do not obey all of these guidelines; use 'grep -v' to
2700     filter out those warnings.
2701
2702'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2703     Warn about the use of an uncasted 'NULL' as sentinel.  When
2704     compiling only with GCC this is a valid sentinel, as 'NULL' is
2705     defined to '__null'.  Although it is a null pointer constant rather
2706     than a null pointer, it is guaranteed to be of the same size as a
2707     pointer.  But this use is not portable across different compilers.
2708
2709'-Wno-non-template-friend (C++ and Objective-C++ only)'
2710     Disable warnings when non-templatized friend functions are declared
2711     within a template.  Since the advent of explicit template
2712     specification support in G++, if the name of the friend is an
2713     unqualified-id (i.e., 'friend foo(int)'), the C++ language
2714     specification demands that the friend declare or define an
2715     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2716     implemented explicit specification, unqualified-ids could be
2717     interpreted as a particular specialization of a templatized
2718     function.  Because this non-conforming behavior is no longer the
2719     default behavior for G++, '-Wnon-template-friend' allows the
2720     compiler to check existing code for potential trouble spots and is
2721     on by default.  This new compiler behavior can be turned off with
2722     '-Wno-non-template-friend', which keeps the conformant compiler
2723     code but disables the helpful warning.
2724
2725'-Wold-style-cast (C++ and Objective-C++ only)'
2726     Warn if an old-style (C-style) cast to a non-void type is used
2727     within a C++ program.  The new-style casts ('dynamic_cast',
2728     'static_cast', 'reinterpret_cast', and 'const_cast') are less
2729     vulnerable to unintended effects and much easier to search for.
2730
2731'-Woverloaded-virtual (C++ and Objective-C++ only)'
2732     Warn when a function declaration hides virtual functions from a
2733     base class.  For example, in:
2734
2735          struct A {
2736            virtual void f();
2737          };
2738
2739          struct B: public A {
2740            void f(int);
2741          };
2742
2743     the 'A' class version of 'f' is hidden in 'B', and code like:
2744
2745          B* b;
2746          b->f();
2747
2748     fails to compile.
2749
2750'-Wno-pmf-conversions (C++ and Objective-C++ only)'
2751     Disable the diagnostic for converting a bound pointer to member
2752     function to a plain pointer.
2753
2754'-Wsign-promo (C++ and Objective-C++ only)'
2755     Warn when overload resolution chooses a promotion from unsigned or
2756     enumerated type to a signed type, over a conversion to an unsigned
2757     type of the same size.  Previous versions of G++ tried to preserve
2758     unsignedness, but the standard mandates the current behavior.
2759
2760
2761File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2762
27633.6 Options Controlling Objective-C and Objective-C++ Dialects
2764==============================================================
2765
2766(NOTE: This manual does not describe the Objective-C and Objective-C++
2767languages themselves.  *Note Language Standards Supported by GCC:
2768Standards, for references.)
2769
2770 This section describes the command-line options that are only
2771meaningful for Objective-C and Objective-C++ programs.  You can also use
2772most of the language-independent GNU compiler options.  For example, you
2773might compile a file 'some_class.m' like this:
2774
2775     gcc -g -fgnu-runtime -O -c some_class.m
2776
2777In this example, '-fgnu-runtime' is an option meant only for Objective-C
2778and Objective-C++ programs; you can use the other options with any
2779language supported by GCC.
2780
2781 Note that since Objective-C is an extension of the C language,
2782Objective-C compilations may also use options specific to the C
2783front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
2784compilations may use C++-specific options (e.g., '-Wabi').
2785
2786 Here is a list of options that are _only_ for compiling Objective-C and
2787Objective-C++ programs:
2788
2789'-fconstant-string-class=CLASS-NAME'
2790     Use CLASS-NAME as the name of the class to instantiate for each
2791     literal string specified with the syntax '@"..."'.  The default
2792     class name is 'NXConstantString' if the GNU runtime is being used,
2793     and 'NSConstantString' if the NeXT runtime is being used (see
2794     below).  The '-fconstant-cfstrings' option, if also present,
2795     overrides the '-fconstant-string-class' setting and cause '@"..."'
2796     literals to be laid out as constant CoreFoundation strings.
2797
2798'-fgnu-runtime'
2799     Generate object code compatible with the standard GNU Objective-C
2800     runtime.  This is the default for most types of systems.
2801
2802'-fnext-runtime'
2803     Generate output compatible with the NeXT runtime.  This is the
2804     default for NeXT-based systems, including Darwin and Mac OS X.  The
2805     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
2806     is used.
2807
2808'-fno-nil-receivers'
2809     Assume that all Objective-C message dispatches ('[receiver
2810     message:arg]') in this translation unit ensure that the receiver is
2811     not 'nil'.  This allows for more efficient entry points in the
2812     runtime to be used.  This option is only available in conjunction
2813     with the NeXT runtime and ABI version 0 or 1.
2814
2815'-fobjc-abi-version=N'
2816     Use version N of the Objective-C ABI for the selected runtime.
2817     This option is currently supported only for the NeXT runtime.  In
2818     that case, Version 0 is the traditional (32-bit) ABI without
2819     support for properties and other Objective-C 2.0 additions.
2820     Version 1 is the traditional (32-bit) ABI with support for
2821     properties and other Objective-C 2.0 additions.  Version 2 is the
2822     modern (64-bit) ABI. If nothing is specified, the default is
2823     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2824     machines.
2825
2826'-fobjc-call-cxx-cdtors'
2827     For each Objective-C class, check if any of its instance variables
2828     is a C++ object with a non-trivial default constructor.  If so,
2829     synthesize a special '- (id) .cxx_construct' instance method which
2830     runs non-trivial default constructors on any such instance
2831     variables, in order, and then return 'self'.  Similarly, check if
2832     any instance variable is a C++ object with a non-trivial
2833     destructor, and if so, synthesize a special '- (void)
2834     .cxx_destruct' method which runs all such default destructors, in
2835     reverse order.
2836
2837     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
2838     thusly generated only operate on instance variables declared in the
2839     current Objective-C class, and not those inherited from
2840     superclasses.  It is the responsibility of the Objective-C runtime
2841     to invoke all such methods in an object's inheritance hierarchy.
2842     The '- (id) .cxx_construct' methods are invoked by the runtime
2843     immediately after a new object instance is allocated; the '- (void)
2844     .cxx_destruct' methods are invoked immediately before the runtime
2845     deallocates an object instance.
2846
2847     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2848     later has support for invoking the '- (id) .cxx_construct' and '-
2849     (void) .cxx_destruct' methods.
2850
2851'-fobjc-direct-dispatch'
2852     Allow fast jumps to the message dispatcher.  On Darwin this is
2853     accomplished via the comm page.
2854
2855'-fobjc-exceptions'
2856     Enable syntactic support for structured exception handling in
2857     Objective-C, similar to what is offered by C++ and Java.  This
2858     option is required to use the Objective-C keywords '@try',
2859     '@throw', '@catch', '@finally' and '@synchronized'.  This option is
2860     available with both the GNU runtime and the NeXT runtime (but not
2861     available in conjunction with the NeXT runtime on Mac OS X 10.2 and
2862     earlier).
2863
2864'-fobjc-gc'
2865     Enable garbage collection (GC) in Objective-C and Objective-C++
2866     programs.  This option is only available with the NeXT runtime; the
2867     GNU runtime has a different garbage collection implementation that
2868     does not require special compiler flags.
2869
2870'-fobjc-nilcheck'
2871     For the NeXT runtime with version 2 of the ABI, check for a nil
2872     receiver in method invocations before doing the actual method call.
2873     This is the default and can be disabled using '-fno-objc-nilcheck'.
2874     Class methods and super calls are never checked for nil in this way
2875     no matter what this flag is set to.  Currently this flag does
2876     nothing when the GNU runtime, or an older version of the NeXT
2877     runtime ABI, is used.
2878
2879'-fobjc-std=objc1'
2880     Conform to the language syntax of Objective-C 1.0, the language
2881     recognized by GCC 4.0.  This only affects the Objective-C additions
2882     to the C/C++ language; it does not affect conformance to C/C++
2883     standards, which is controlled by the separate C/C++ dialect option
2884     flags.  When this option is used with the Objective-C or
2885     Objective-C++ compiler, any Objective-C syntax that is not
2886     recognized by GCC 4.0 is rejected.  This is useful if you need to
2887     make sure that your Objective-C code can be compiled with older
2888     versions of GCC.
2889
2890'-freplace-objc-classes'
2891     Emit a special marker instructing 'ld(1)' not to statically link in
2892     the resulting object file, and allow 'dyld(1)' to load it in at run
2893     time instead.  This is used in conjunction with the
2894     Fix-and-Continue debugging mode, where the object file in question
2895     may be recompiled and dynamically reloaded in the course of program
2896     execution, without the need to restart the program itself.
2897     Currently, Fix-and-Continue functionality is only available in
2898     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2899
2900'-fzero-link'
2901     When compiling for the NeXT runtime, the compiler ordinarily
2902     replaces calls to 'objc_getClass("...")' (when the name of the
2903     class is known at compile time) with static class references that
2904     get initialized at load time, which improves run-time performance.
2905     Specifying the '-fzero-link' flag suppresses this behavior and
2906     causes calls to 'objc_getClass("...")' to be retained.  This is
2907     useful in Zero-Link debugging mode, since it allows for individual
2908     class implementations to be modified during program execution.  The
2909     GNU runtime currently always retains calls to
2910     'objc_get_class("...")' regardless of command-line options.
2911
2912'-gen-decls'
2913     Dump interface declarations for all classes seen in the source file
2914     to a file named 'SOURCENAME.decl'.
2915
2916'-Wassign-intercept (Objective-C and Objective-C++ only)'
2917     Warn whenever an Objective-C assignment is being intercepted by the
2918     garbage collector.
2919
2920'-Wno-protocol (Objective-C and Objective-C++ only)'
2921     If a class is declared to implement a protocol, a warning is issued
2922     for every method in the protocol that is not implemented by the
2923     class.  The default behavior is to issue a warning for every method
2924     not explicitly implemented in the class, even if a method
2925     implementation is inherited from the superclass.  If you use the
2926     '-Wno-protocol' option, then methods inherited from the superclass
2927     are considered to be implemented, and no warning is issued for
2928     them.
2929
2930'-Wselector (Objective-C and Objective-C++ only)'
2931     Warn if multiple methods of different types for the same selector
2932     are found during compilation.  The check is performed on the list
2933     of methods in the final stage of compilation.  Additionally, a
2934     check is performed for each selector appearing in a
2935     '@selector(...)' expression, and a corresponding method for that
2936     selector has been found during compilation.  Because these checks
2937     scan the method table only at the end of compilation, these
2938     warnings are not produced if the final stage of compilation is not
2939     reached, for example because an error is found during compilation,
2940     or because the '-fsyntax-only' option is being used.
2941
2942'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2943     Warn if multiple methods with differing argument and/or return
2944     types are found for a given selector when attempting to send a
2945     message using this selector to a receiver of type 'id' or 'Class'.
2946     When this flag is off (which is the default behavior), the compiler
2947     omits such warnings if any differences found are confined to types
2948     that share the same size and alignment.
2949
2950'-Wundeclared-selector (Objective-C and Objective-C++ only)'
2951     Warn if a '@selector(...)' expression referring to an undeclared
2952     selector is found.  A selector is considered undeclared if no
2953     method with that name has been declared before the '@selector(...)'
2954     expression, either explicitly in an '@interface' or '@protocol'
2955     declaration, or implicitly in an '@implementation' section.  This
2956     option always performs its checks as soon as a '@selector(...)'
2957     expression is found, while '-Wselector' only performs its checks in
2958     the final stage of compilation.  This also enforces the coding
2959     style convention that methods and selectors must be declared before
2960     being used.
2961
2962'-print-objc-runtime-info'
2963     Generate C header describing the largest structure that is passed
2964     by value, if any.
2965
2966
2967File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2968
29693.7 Options to Control Diagnostic Messages Formatting
2970=====================================================
2971
2972Traditionally, diagnostic messages have been formatted irrespective of
2973the output device's aspect (e.g. its width, ...).  You can use the
2974options described below to control the formatting algorithm for
2975diagnostic messages, e.g. how many characters per line, how often source
2976location information should be reported.  Note that some language front
2977ends may not honor these options.
2978
2979'-fmessage-length=N'
2980     Try to format error messages so that they fit on lines of about N
2981     characters.  The default is 72 characters for 'g++' and 0 for the
2982     rest of the front ends supported by GCC.  If N is zero, then no
2983     line-wrapping is done; each error message appears on a single line.
2984
2985'-fdiagnostics-show-location=once'
2986     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2987     messages reporter to emit source location information _once_; that
2988     is, in case the message is too long to fit on a single physical
2989     line and has to be wrapped, the source location won't be emitted
2990     (as prefix) again, over and over, in subsequent continuation lines.
2991     This is the default behavior.
2992
2993'-fdiagnostics-show-location=every-line'
2994     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2995     messages reporter to emit the same source location information (as
2996     prefix) for physical lines that result from the process of breaking
2997     a message which is too long to fit on a single line.
2998
2999'-fno-diagnostics-show-option'
3000     By default, each diagnostic emitted includes text indicating the
3001     command-line option that directly controls the diagnostic (if such
3002     an option is known to the diagnostic machinery).  Specifying the
3003     '-fno-diagnostics-show-option' flag suppresses that behavior.
3004
3005'-fno-diagnostics-show-caret'
3006     By default, each diagnostic emitted includes the original source
3007     line and a caret '^' indicating the column.  This option suppresses
3008     this information.
3009
3010
3011File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3012
30133.8 Options to Request or Suppress Warnings
3014===========================================
3015
3016Warnings are diagnostic messages that report constructions that are not
3017inherently erroneous but that are risky or suggest there may have been
3018an error.
3019
3020 The following language-independent options do not enable specific
3021warnings but control the kinds of diagnostics produced by GCC.
3022
3023'-fsyntax-only'
3024     Check the code for syntax errors, but don't do anything beyond
3025     that.
3026
3027'-fmax-errors=N'
3028     Limits the maximum number of error messages to N, at which point
3029     GCC bails out rather than attempting to continue processing the
3030     source code.  If N is 0 (the default), there is no limit on the
3031     number of error messages produced.  If '-Wfatal-errors' is also
3032     specified, then '-Wfatal-errors' takes precedence over this option.
3033
3034'-w'
3035     Inhibit all warning messages.
3036
3037'-Werror'
3038     Make all warnings into errors.
3039
3040'-Werror='
3041     Make the specified warning into an error.  The specifier for a
3042     warning is appended; for example '-Werror=switch' turns the
3043     warnings controlled by '-Wswitch' into errors.  This switch takes a
3044     negative form, to be used to negate '-Werror' for specific
3045     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
3046     not be errors, even when '-Werror' is in effect.
3047
3048     The warning message for each controllable warning includes the
3049     option that controls the warning.  That option can then be used
3050     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
3051     the option in the warning message can be disabled using the
3052     '-fno-diagnostics-show-option' flag.)
3053
3054     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
3055     However, '-Wno-error='FOO does not imply anything.
3056
3057'-Wfatal-errors'
3058     This option causes the compiler to abort compilation on the first
3059     error occurred rather than trying to keep going and printing
3060     further error messages.
3061
3062 You can request many specific warnings with options beginning with
3063'-W', for example '-Wimplicit' to request warnings on implicit
3064declarations.  Each of these specific warning options also has a
3065negative form beginning '-Wno-' to turn off warnings; for example,
3066'-Wno-implicit'.  This manual lists only one of the two forms, whichever
3067is not the default.  For further language-specific options also refer to
3068*note C++ Dialect Options:: and *note Objective-C and Objective-C++
3069Dialect Options::.
3070
3071 When an unrecognized warning option is requested (e.g.,
3072'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3073not recognized.  However, if the '-Wno-' form is used, the behavior is
3074slightly different: no diagnostic is produced for '-Wno-unknown-warning'
3075unless other diagnostics are being produced.  This allows the use of new
3076'-Wno-' options with old compilers, but if something goes wrong, the
3077compiler warns that an unrecognized option is present.
3078
3079'-Wpedantic'
3080'-pedantic'
3081     Issue all the warnings demanded by strict ISO C and ISO C++; reject
3082     all programs that use forbidden extensions, and some other programs
3083     that do not follow ISO C and ISO C++.  For ISO C, follows the
3084     version of the ISO C standard specified by any '-std' option used.
3085
3086     Valid ISO C and ISO C++ programs should compile properly with or
3087     without this option (though a rare few require '-ansi' or a '-std'
3088     option specifying the required version of ISO C).  However, without
3089     this option, certain GNU extensions and traditional C and C++
3090     features are supported as well.  With this option, they are
3091     rejected.
3092
3093     '-Wpedantic' does not cause warning messages for use of the
3094     alternate keywords whose names begin and end with '__'.  Pedantic
3095     warnings are also disabled in the expression that follows
3096     '__extension__'.  However, only system header files should use
3097     these escape routes; application programs should avoid them.  *Note
3098     Alternate Keywords::.
3099
3100     Some users try to use '-Wpedantic' to check programs for strict ISO
3101     C conformance.  They soon find that it does not do quite what they
3102     want: it finds some non-ISO practices, but not all--only those for
3103     which ISO C _requires_ a diagnostic, and some others for which
3104     diagnostics have been added.
3105
3106     A feature to report any failure to conform to ISO C might be useful
3107     in some instances, but would require considerable additional work
3108     and would be quite different from '-Wpedantic'.  We don't have
3109     plans to support such a feature in the near future.
3110
3111     Where the standard specified with '-std' represents a GNU extended
3112     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
3113     "base standard", the version of ISO C on which the GNU extended
3114     dialect is based.  Warnings from '-Wpedantic' are given where they
3115     are required by the base standard.  (It does not make sense for
3116     such warnings to be given only for features not in the specified
3117     GNU C dialect, since by definition the GNU dialects of C include
3118     all features the compiler supports with the given option, and there
3119     would be nothing to warn about.)
3120
3121'-pedantic-errors'
3122     Like '-Wpedantic', except that errors are produced rather than
3123     warnings.
3124
3125'-Wall'
3126     This enables all the warnings about constructions that some users
3127     consider questionable, and that are easy to avoid (or modify to
3128     prevent the warning), even in conjunction with macros.  This also
3129     enables some language-specific warnings described in *note C++
3130     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3131     Options::.
3132
3133     '-Wall' turns on the following warning flags:
3134
3135          -Waddress
3136          -Warray-bounds (only with -O2)
3137          -Wc++11-compat
3138          -Wchar-subscripts
3139          -Wenum-compare (in C/ObjC; this is on by default in C++)
3140          -Wimplicit-int (C and Objective-C only)
3141          -Wimplicit-function-declaration (C and Objective-C only)
3142          -Wcomment
3143          -Wformat
3144          -Wmain (only for C/ObjC and unless -ffreestanding)
3145          -Wmaybe-uninitialized
3146          -Wmissing-braces (only for C/ObjC)
3147          -Wnonnull
3148          -Wparentheses
3149          -Wpointer-sign
3150          -Wreorder
3151          -Wreturn-type
3152          -Wsequence-point
3153          -Wsign-compare (only in C++)
3154          -Wstrict-aliasing
3155          -Wstrict-overflow=1
3156          -Wswitch
3157          -Wtrigraphs
3158          -Wuninitialized
3159          -Wunknown-pragmas
3160          -Wunused-function
3161          -Wunused-label
3162          -Wunused-value
3163          -Wunused-variable
3164          -Wvolatile-register-var
3165
3166
3167     Note that some warning flags are not implied by '-Wall'.  Some of
3168     them warn about constructions that users generally do not consider
3169     questionable, but which occasionally you might wish to check for;
3170     others warn about constructions that are necessary or hard to avoid
3171     in some cases, and there is no simple way to modify the code to
3172     suppress the warning.  Some of them are enabled by '-Wextra' but
3173     many of them must be enabled individually.
3174
3175'-Wextra'
3176     This enables some extra warning flags that are not enabled by
3177     '-Wall'.  (This option used to be called '-W'.  The older name is
3178     still supported, but the newer name is more descriptive.)
3179
3180          -Wclobbered
3181          -Wempty-body
3182          -Wignored-qualifiers
3183          -Wmissing-field-initializers
3184          -Wmissing-parameter-type (C only)
3185          -Wold-style-declaration (C only)
3186          -Woverride-init
3187          -Wsign-compare
3188          -Wtype-limits
3189          -Wuninitialized
3190          -Wunused-parameter (only with -Wunused or -Wall)
3191          -Wunused-but-set-parameter (only with -Wunused or -Wall)
3192
3193
3194     The option '-Wextra' also prints warning messages for the following
3195     cases:
3196
3197        * A pointer is compared against integer zero with '<', '<=',
3198          '>', or '>='.
3199
3200        * (C++ only) An enumerator and a non-enumerator both appear in a
3201          conditional expression.
3202
3203        * (C++ only) Ambiguous virtual bases.
3204
3205        * (C++ only) Subscripting an array that has been declared
3206          'register'.
3207
3208        * (C++ only) Taking the address of a variable that has been
3209          declared 'register'.
3210
3211        * (C++ only) A base class is not initialized in a derived
3212          class's copy constructor.
3213
3214'-Wchar-subscripts'
3215     Warn if an array subscript has type 'char'.  This is a common cause
3216     of error, as programmers often forget that this type is signed on
3217     some machines.  This warning is enabled by '-Wall'.
3218
3219'-Wcomment'
3220     Warn whenever a comment-start sequence '/*' appears in a '/*'
3221     comment, or whenever a Backslash-Newline appears in a '//' comment.
3222     This warning is enabled by '-Wall'.
3223
3224'-Wno-coverage-mismatch'
3225     Warn if feedback profiles do not match when using the
3226     '-fprofile-use' option.  If a source file is changed between
3227     compiling with '-fprofile-gen' and with '-fprofile-use', the files
3228     with the profile feedback can fail to match the source file and GCC
3229     cannot use the profile feedback information.  By default, this
3230     warning is enabled and is treated as an error.
3231     '-Wno-coverage-mismatch' can be used to disable the warning or
3232     '-Wno-error=coverage-mismatch' can be used to disable the error.
3233     Disabling the error for this warning can result in poorly optimized
3234     code and is useful only in the case of very minor changes such as
3235     bug fixes to an existing code-base.  Completely disabling the
3236     warning is not recommended.
3237
3238'-Wno-cpp'
3239     (C, Objective-C, C++, Objective-C++ and Fortran only)
3240
3241     Suppress warning messages emitted by '#warning' directives.
3242
3243'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3244     Give a warning when a value of type 'float' is implicitly promoted
3245     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
3246     unit implement 'float' in hardware, but emulate 'double' in
3247     software.  On such a machine, doing computations using 'double'
3248     values is much more expensive because of the overhead required for
3249     software emulation.
3250
3251     It is easy to accidentally do computations with 'double' because
3252     floating-point literals are implicitly of type 'double'.  For
3253     example, in:
3254          float area(float radius)
3255          {
3256             return 3.14159 * radius * radius;
3257          }
3258     the compiler performs the entire computation with 'double' because
3259     the floating-point literal is a 'double'.
3260
3261'-Wformat'
3262'-Wformat=N'
3263     Check calls to 'printf' and 'scanf', etc., to make sure that the
3264     arguments supplied have types appropriate to the format string
3265     specified, and that the conversions specified in the format string
3266     make sense.  This includes standard functions, and others specified
3267     by format attributes (*note Function Attributes::), in the
3268     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
3269     not in the C standard) families (or other target-specific
3270     families).  Which functions are checked without format attributes
3271     having been specified depends on the standard version selected, and
3272     such checks of functions without the attribute specified are
3273     disabled by '-ffreestanding' or '-fno-builtin'.
3274
3275     The formats are checked against the format features supported by
3276     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3277     as well as features from the Single Unix Specification and some BSD
3278     and GNU extensions.  Other library implementations may not support
3279     all these features; GCC does not support warning about features
3280     that go beyond a particular library's limitations.  However, if
3281     '-Wpedantic' is used with '-Wformat', warnings are given about
3282     format features not in the selected standard version (but not for
3283     'strfmon' formats, since those are not in any version of the C
3284     standard).  *Note Options Controlling C Dialect: C Dialect Options.
3285
3286     '-Wformat=1'
3287     '-Wformat'
3288          Option '-Wformat' is equivalent to '-Wformat=1', and
3289          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
3290          also checks for null format arguments for several functions,
3291          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
3292          level of format checking can be disabled by the options:
3293          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
3294          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
3295
3296     '-Wno-format-contains-nul'
3297          If '-Wformat' is specified, do not warn about format strings
3298          that contain NUL bytes.
3299
3300     '-Wno-format-extra-args'
3301          If '-Wformat' is specified, do not warn about excess arguments
3302          to a 'printf' or 'scanf' format function.  The C standard
3303          specifies that such arguments are ignored.
3304
3305          Where the unused arguments lie between used arguments that are
3306          specified with '$' operand number specifications, normally
3307          warnings are still given, since the implementation could not
3308          know what type to pass to 'va_arg' to skip the unused
3309          arguments.  However, in the case of 'scanf' formats, this
3310          option suppresses the warning if the unused arguments are all
3311          pointers, since the Single Unix Specification says that such
3312          unused arguments are allowed.
3313
3314     '-Wno-format-zero-length'
3315          If '-Wformat' is specified, do not warn about zero-length
3316          formats.  The C standard specifies that zero-length formats
3317          are allowed.
3318
3319     '-Wformat=2'
3320          Enable '-Wformat' plus additional format checks.  Currently
3321          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
3322          -Wformat-y2k'.
3323
3324     '-Wformat-nonliteral'
3325          If '-Wformat' is specified, also warn if the format string is
3326          not a string literal and so cannot be checked, unless the
3327          format function takes its format arguments as a 'va_list'.
3328
3329     '-Wformat-security'
3330          If '-Wformat' is specified, also warn about uses of format
3331          functions that represent possible security problems.  At
3332          present, this warns about calls to 'printf' and 'scanf'
3333          functions where the format string is not a string literal and
3334          there are no format arguments, as in 'printf (foo);'.  This
3335          may be a security hole if the format string came from
3336          untrusted input and contains '%n'.  (This is currently a
3337          subset of what '-Wformat-nonliteral' warns about, but in
3338          future warnings may be added to '-Wformat-security' that are
3339          not included in '-Wformat-nonliteral'.)
3340
3341     '-Wformat-y2k'
3342          If '-Wformat' is specified, also warn about 'strftime' formats
3343          that may yield only a two-digit year.
3344
3345'-Wnonnull'
3346     Warn about passing a null pointer for arguments marked as requiring
3347     a non-null value by the 'nonnull' function attribute.
3348
3349     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
3350     disabled with the '-Wno-nonnull' option.
3351
3352'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3353     Warn about uninitialized variables that are initialized with
3354     themselves.  Note this option can only be used with the
3355     '-Wuninitialized' option.
3356
3357     For example, GCC warns about 'i' being uninitialized in the
3358     following snippet only when '-Winit-self' has been specified:
3359          int f()
3360          {
3361            int i = i;
3362            return i;
3363          }
3364
3365     This warning is enabled by '-Wall' in C++.
3366
3367'-Wimplicit-int (C and Objective-C only)'
3368     Warn when a declaration does not specify a type.  This warning is
3369     enabled by '-Wall'.
3370
3371'-Wimplicit-function-declaration (C and Objective-C only)'
3372     Give a warning whenever a function is used before being declared.
3373     In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
3374     by default and it is made into an error by '-pedantic-errors'.
3375     This warning is also enabled by '-Wall'.
3376
3377'-Wimplicit (C and Objective-C only)'
3378     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
3379     This warning is enabled by '-Wall'.
3380
3381'-Wignored-qualifiers (C and C++ only)'
3382     Warn if the return type of a function has a type qualifier such as
3383     'const'.  For ISO C such a type qualifier has no effect, since the
3384     value returned by a function is not an lvalue.  For C++, the
3385     warning is only emitted for scalar types or 'void'.  ISO C
3386     prohibits qualified 'void' return types on function definitions, so
3387     such return types always receive a warning even without this
3388     option.
3389
3390     This warning is also enabled by '-Wextra'.
3391
3392'-Wmain'
3393     Warn if the type of 'main' is suspicious.  'main' should be a
3394     function with external linkage, returning int, taking either zero
3395     arguments, two, or three arguments of appropriate types.  This
3396     warning is enabled by default in C++ and is enabled by either
3397     '-Wall' or '-Wpedantic'.
3398
3399'-Wmissing-braces'
3400     Warn if an aggregate or union initializer is not fully bracketed.
3401     In the following example, the initializer for 'a' is not fully
3402     bracketed, but that for 'b' is fully bracketed.  This warning is
3403     enabled by '-Wall' in C.
3404
3405          int a[2][2] = { 0, 1, 2, 3 };
3406          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3407
3408     This warning is enabled by '-Wall'.
3409
3410'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3411     Warn if a user-supplied include directory does not exist.
3412
3413'-Wparentheses'
3414     Warn if parentheses are omitted in certain contexts, such as when
3415     there is an assignment in a context where a truth value is
3416     expected, or when operators are nested whose precedence people
3417     often get confused about.
3418
3419     Also warn if a comparison like 'x<=y<=z' appears; this is
3420     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
3421     interpretation from that of ordinary mathematical notation.
3422
3423     Also warn about constructions where there may be confusion to which
3424     'if' statement an 'else' branch belongs.  Here is an example of
3425     such a case:
3426
3427          {
3428            if (a)
3429              if (b)
3430                foo ();
3431            else
3432              bar ();
3433          }
3434
3435     In C/C++, every 'else' branch belongs to the innermost possible
3436     'if' statement, which in this example is 'if (b)'.  This is often
3437     not what the programmer expected, as illustrated in the above
3438     example by indentation the programmer chose.  When there is the
3439     potential for this confusion, GCC issues a warning when this flag
3440     is specified.  To eliminate the warning, add explicit braces around
3441     the innermost 'if' statement so there is no way the 'else' can
3442     belong to the enclosing 'if'.  The resulting code looks like this:
3443
3444          {
3445            if (a)
3446              {
3447                if (b)
3448                  foo ();
3449                else
3450                  bar ();
3451              }
3452          }
3453
3454     Also warn for dangerous uses of the GNU extension to '?:' with
3455     omitted middle operand.  When the condition in the '?': operator is
3456     a boolean expression, the omitted value is always 1.  Often
3457     programmers expect it to be a value computed inside the conditional
3458     expression instead.
3459
3460     This warning is enabled by '-Wall'.
3461
3462'-Wsequence-point'
3463     Warn about code that may have undefined semantics because of
3464     violations of sequence point rules in the C and C++ standards.
3465
3466     The C and C++ standards define the order in which expressions in a
3467     C/C++ program are evaluated in terms of "sequence points", which
3468     represent a partial ordering between the execution of parts of the
3469     program: those executed before the sequence point, and those
3470     executed after it.  These occur after the evaluation of a full
3471     expression (one which is not part of a larger expression), after
3472     the evaluation of the first operand of a '&&', '||', '? :' or ','
3473     (comma) operator, before a function is called (but after the
3474     evaluation of its arguments and the expression denoting the called
3475     function), and in certain other places.  Other than as expressed by
3476     the sequence point rules, the order of evaluation of subexpressions
3477     of an expression is not specified.  All these rules describe only a
3478     partial order rather than a total order, since, for example, if two
3479     functions are called within one expression with no sequence point
3480     between them, the order in which the functions are called is not
3481     specified.  However, the standards committee have ruled that
3482     function calls do not overlap.
3483
3484     It is not specified when between sequence points modifications to
3485     the values of objects take effect.  Programs whose behavior depends
3486     on this have undefined behavior; the C and C++ standards specify
3487     that "Between the previous and next sequence point an object shall
3488     have its stored value modified at most once by the evaluation of an
3489     expression.  Furthermore, the prior value shall be read only to
3490     determine the value to be stored.".  If a program breaks these
3491     rules, the results on any particular implementation are entirely
3492     unpredictable.
3493
3494     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
3495     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
3496     diagnosed by this option, and it may give an occasional false
3497     positive result, but in general it has been found fairly effective
3498     at detecting this sort of problem in programs.
3499
3500     The standard is worded confusingly, therefore there is some debate
3501     over the precise meaning of the sequence point rules in subtle
3502     cases.  Links to discussions of the problem, including proposed
3503     formal definitions, may be found on the GCC readings page, at
3504     <http://gcc.gnu.org/readings.html>.
3505
3506     This warning is enabled by '-Wall' for C and C++.
3507
3508'-Wno-return-local-addr'
3509     Do not warn about returning a pointer (or in C++, a reference) to a
3510     variable that goes out of scope after the function returns.
3511
3512'-Wreturn-type'
3513     Warn whenever a function is defined with a return type that
3514     defaults to 'int'.  Also warn about any 'return' statement with no
3515     return value in a function whose return type is not 'void' (falling
3516     off the end of the function body is considered returning without a
3517     value), and about a 'return' statement with an expression in a
3518     function whose return type is 'void'.
3519
3520     For C++, a function without return type always produces a
3521     diagnostic message, even when '-Wno-return-type' is specified.  The
3522     only exceptions are 'main' and functions defined in system headers.
3523
3524     This warning is enabled by '-Wall'.
3525
3526'-Wswitch'
3527     Warn whenever a 'switch' statement has an index of enumerated type
3528     and lacks a 'case' for one or more of the named codes of that
3529     enumeration.  (The presence of a 'default' label prevents this
3530     warning.)  'case' labels outside the enumeration range also provoke
3531     warnings when this option is used (even if there is a 'default'
3532     label).  This warning is enabled by '-Wall'.
3533
3534'-Wswitch-default'
3535     Warn whenever a 'switch' statement does not have a 'default' case.
3536
3537'-Wswitch-enum'
3538     Warn whenever a 'switch' statement has an index of enumerated type
3539     and lacks a 'case' for one or more of the named codes of that
3540     enumeration.  'case' labels outside the enumeration range also
3541     provoke warnings when this option is used.  The only difference
3542     between '-Wswitch' and this option is that this option gives a
3543     warning about an omitted enumeration code even if there is a
3544     'default' label.
3545
3546'-Wsync-nand (C and C++ only)'
3547     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
3548     built-in functions are used.  These functions changed semantics in
3549     GCC 4.4.
3550
3551'-Wtrigraphs'
3552     Warn if any trigraphs are encountered that might change the meaning
3553     of the program (trigraphs within comments are not warned about).
3554     This warning is enabled by '-Wall'.
3555
3556'-Wunused-but-set-parameter'
3557     Warn whenever a function parameter is assigned to, but otherwise
3558     unused (aside from its declaration).
3559
3560     To suppress this warning use the 'unused' attribute (*note Variable
3561     Attributes::).
3562
3563     This warning is also enabled by '-Wunused' together with '-Wextra'.
3564
3565'-Wunused-but-set-variable'
3566     Warn whenever a local variable is assigned to, but otherwise unused
3567     (aside from its declaration).  This warning is enabled by '-Wall'.
3568
3569     To suppress this warning use the 'unused' attribute (*note Variable
3570     Attributes::).
3571
3572     This warning is also enabled by '-Wunused', which is enabled by
3573     '-Wall'.
3574
3575'-Wunused-function'
3576     Warn whenever a static function is declared but not defined or a
3577     non-inline static function is unused.  This warning is enabled by
3578     '-Wall'.
3579
3580'-Wunused-label'
3581     Warn whenever a label is declared but not used.  This warning is
3582     enabled by '-Wall'.
3583
3584     To suppress this warning use the 'unused' attribute (*note Variable
3585     Attributes::).
3586
3587'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3588     Warn when a typedef locally defined in a function is not used.
3589     This warning is enabled by '-Wall'.
3590
3591'-Wunused-parameter'
3592     Warn whenever a function parameter is unused aside from its
3593     declaration.
3594
3595     To suppress this warning use the 'unused' attribute (*note Variable
3596     Attributes::).
3597
3598'-Wno-unused-result'
3599     Do not warn if a caller of a function marked with attribute
3600     'warn_unused_result' (*note Function Attributes::) does not use its
3601     return value.  The default is '-Wunused-result'.
3602
3603'-Wunused-variable'
3604     Warn whenever a local variable or non-constant static variable is
3605     unused aside from its declaration.  This warning is enabled by
3606     '-Wall'.
3607
3608     To suppress this warning use the 'unused' attribute (*note Variable
3609     Attributes::).
3610
3611'-Wunused-value'
3612     Warn whenever a statement computes a result that is explicitly not
3613     used.  To suppress this warning cast the unused expression to
3614     'void'.  This includes an expression-statement or the left-hand
3615     side of a comma expression that contains no side effects.  For
3616     example, an expression such as 'x[i,j]' causes a warning, while
3617     'x[(void)i,j]' does not.
3618
3619     This warning is enabled by '-Wall'.
3620
3621'-Wunused'
3622     All the above '-Wunused' options combined.
3623
3624     In order to get a warning about an unused function parameter, you
3625     must either specify '-Wextra -Wunused' (note that '-Wall' implies
3626     '-Wunused'), or separately specify '-Wunused-parameter'.
3627
3628'-Wuninitialized'
3629     Warn if an automatic variable is used without first being
3630     initialized or if a variable may be clobbered by a 'setjmp' call.
3631     In C++, warn if a non-static reference or non-static 'const' member
3632     appears in a class without constructors.
3633
3634     If you want to warn about code that uses the uninitialized value of
3635     the variable in its own initializer, use the '-Winit-self' option.
3636
3637     These warnings occur for individual uninitialized or clobbered
3638     elements of structure, union or array variables as well as for
3639     variables that are uninitialized or clobbered as a whole.  They do
3640     not occur for variables or elements declared 'volatile'.  Because
3641     these warnings depend on optimization, the exact variables or
3642     elements for which there are warnings depends on the precise
3643     optimization options and version of GCC used.
3644
3645     Note that there may be no warning about a variable that is used
3646     only to compute a value that itself is never used, because such
3647     computations may be deleted by data flow analysis before the
3648     warnings are printed.
3649
3650'-Wmaybe-uninitialized'
3651     For an automatic variable, if there exists a path from the function
3652     entry to a use of the variable that is initialized, but there exist
3653     some other paths for which the variable is not initialized, the
3654     compiler emits a warning if it cannot prove the uninitialized paths
3655     are not executed at run time.  These warnings are made optional
3656     because GCC is not smart enough to see all the reasons why the code
3657     might be correct in spite of appearing to have an error.  Here is
3658     one example of how this can happen:
3659
3660          {
3661            int x;
3662            switch (y)
3663              {
3664              case 1: x = 1;
3665                break;
3666              case 2: x = 4;
3667                break;
3668              case 3: x = 5;
3669              }
3670            foo (x);
3671          }
3672
3673     If the value of 'y' is always 1, 2 or 3, then 'x' is always
3674     initialized, but GCC doesn't know this.  To suppress the warning,
3675     you need to provide a default case with assert(0) or similar code.
3676
3677     This option also warns when a non-volatile automatic variable might
3678     be changed by a call to 'longjmp'.  These warnings as well are
3679     possible only in optimizing compilation.
3680
3681     The compiler sees only the calls to 'setjmp'.  It cannot know where
3682     'longjmp' will be called; in fact, a signal handler could call it
3683     at any point in the code.  As a result, you may get a warning even
3684     when there is in fact no problem because 'longjmp' cannot in fact
3685     be called at the place that would cause a problem.
3686
3687     Some spurious warnings can be avoided if you declare all the
3688     functions you use that never return as 'noreturn'.  *Note Function
3689     Attributes::.
3690
3691     This warning is enabled by '-Wall' or '-Wextra'.
3692
3693'-Wunknown-pragmas'
3694     Warn when a '#pragma' directive is encountered that is not
3695     understood by GCC.  If this command-line option is used, warnings
3696     are even issued for unknown pragmas in system header files.  This
3697     is not the case if the warnings are only enabled by the '-Wall'
3698     command-line option.
3699
3700'-Wno-pragmas'
3701     Do not warn about misuses of pragmas, such as incorrect parameters,
3702     invalid syntax, or conflicts between pragmas.  See also
3703     '-Wunknown-pragmas'.
3704
3705'-Wstrict-aliasing'
3706     This option is only active when '-fstrict-aliasing' is active.  It
3707     warns about code that might break the strict aliasing rules that
3708     the compiler is using for optimization.  The warning does not catch
3709     all cases, but does attempt to catch the more common pitfalls.  It
3710     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
3711
3712'-Wstrict-aliasing=n'
3713     This option is only active when '-fstrict-aliasing' is active.  It
3714     warns about code that might break the strict aliasing rules that
3715     the compiler is using for optimization.  Higher levels correspond
3716     to higher accuracy (fewer false positives).  Higher levels also
3717     correspond to more effort, similar to the way '-O' works.
3718     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
3719
3720     Level 1: Most aggressive, quick, least accurate.  Possibly useful
3721     when higher levels do not warn but '-fstrict-aliasing' still breaks
3722     the code, as it has very few false negatives.  However, it has many
3723     false positives.  Warns for all pointer conversions between
3724     possibly incompatible types, even if never dereferenced.  Runs in
3725     the front end only.
3726
3727     Level 2: Aggressive, quick, not too precise.  May still have many
3728     false positives (not as many as level 1 though), and few false
3729     negatives (but possibly more than level 1).  Unlike level 1, it
3730     only warns when an address is taken.  Warns about incomplete types.
3731     Runs in the front end only.
3732
3733     Level 3 (default for '-Wstrict-aliasing'): Should have very few
3734     false positives and few false negatives.  Slightly slower than
3735     levels 1 or 2 when optimization is enabled.  Takes care of the
3736     common pun+dereference pattern in the front end:
3737     '*(int*)&some_float'.  If optimization is enabled, it also runs in
3738     the back end, where it deals with multiple statement cases using
3739     flow-sensitive points-to information.  Only warns when the
3740     converted pointer is dereferenced.  Does not warn about incomplete
3741     types.
3742
3743'-Wstrict-overflow'
3744'-Wstrict-overflow=N'
3745     This option is only active when '-fstrict-overflow' is active.  It
3746     warns about cases where the compiler optimizes based on the
3747     assumption that signed overflow does not occur.  Note that it does
3748     not warn about all cases where the code might overflow: it only
3749     warns about cases where the compiler implements some optimization.
3750     Thus this warning depends on the optimization level.
3751
3752     An optimization that assumes that signed overflow does not occur is
3753     perfectly safe if the values of the variables involved are such
3754     that overflow never does, in fact, occur.  Therefore this warning
3755     can easily give a false positive: a warning about code that is not
3756     actually a problem.  To help focus on important issues, several
3757     warning levels are defined.  No warnings are issued for the use of
3758     undefined signed overflow when estimating how many iterations a
3759     loop requires, in particular when determining whether a loop will
3760     be executed at all.
3761
3762     '-Wstrict-overflow=1'
3763          Warn about cases that are both questionable and easy to avoid.
3764          For example, with '-fstrict-overflow', the compiler simplifies
3765          'x + 1 > x' to '1'.  This level of '-Wstrict-overflow' is
3766          enabled by '-Wall'; higher levels are not, and must be
3767          explicitly requested.
3768
3769     '-Wstrict-overflow=2'
3770          Also warn about other cases where a comparison is simplified
3771          to a constant.  For example: 'abs (x) >= 0'.  This can only be
3772          simplified when '-fstrict-overflow' is in effect, because 'abs
3773          (INT_MIN)' overflows to 'INT_MIN', which is less than zero.
3774          '-Wstrict-overflow' (with no level) is the same as
3775          '-Wstrict-overflow=2'.
3776
3777     '-Wstrict-overflow=3'
3778          Also warn about other cases where a comparison is simplified.
3779          For example: 'x + 1 > 1' is simplified to 'x > 0'.
3780
3781     '-Wstrict-overflow=4'
3782          Also warn about other simplifications not covered by the above
3783          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
3784
3785     '-Wstrict-overflow=5'
3786          Also warn about cases where the compiler reduces the magnitude
3787          of a constant involved in a comparison.  For example: 'x + 2 >
3788          y' is simplified to 'x + 1 >= y'.  This is reported only at
3789          the highest warning level because this simplification applies
3790          to many comparisons, so this warning level gives a very large
3791          number of false positives.
3792
3793'-Wsuggest-attribute=[pure|const|noreturn|format]'
3794     Warn for cases where adding an attribute may be beneficial.  The
3795     attributes currently supported are listed below.
3796
3797     '-Wsuggest-attribute=pure'
3798     '-Wsuggest-attribute=const'
3799     '-Wsuggest-attribute=noreturn'
3800
3801          Warn about functions that might be candidates for attributes
3802          'pure', 'const' or 'noreturn'.  The compiler only warns for
3803          functions visible in other compilation units or (in the case
3804          of 'pure' and 'const') if it cannot prove that the function
3805          returns normally.  A function returns normally if it doesn't
3806          contain an infinite loop or return abnormally by throwing,
3807          calling 'abort()' or trapping.  This analysis requires option
3808          '-fipa-pure-const', which is enabled by default at '-O' and
3809          higher.  Higher optimization levels improve the accuracy of
3810          the analysis.
3811
3812     '-Wsuggest-attribute=format'
3813     '-Wmissing-format-attribute'
3814
3815          Warn about function pointers that might be candidates for
3816          'format' attributes.  Note these are only possible candidates,
3817          not absolute ones.  GCC guesses that function pointers with
3818          'format' attributes that are used in assignment,
3819          initialization, parameter passing or return statements should
3820          have a corresponding 'format' attribute in the resulting type.
3821          I.e. the left-hand side of the assignment or initialization,
3822          the type of the parameter variable, or the return type of the
3823          containing function respectively should also have a 'format'
3824          attribute to avoid the warning.
3825
3826          GCC also warns about function definitions that might be
3827          candidates for 'format' attributes.  Again, these are only
3828          possible candidates.  GCC guesses that 'format' attributes
3829          might be appropriate for any function that calls a function
3830          like 'vprintf' or 'vscanf', but this might not always be the
3831          case, and some functions for which 'format' attributes are
3832          appropriate may not be detected.
3833
3834'-Warray-bounds'
3835     This option is only active when '-ftree-vrp' is active (default for
3836     '-O2' and above).  It warns about subscripts to arrays that are
3837     always out of bounds.  This warning is enabled by '-Wall'.
3838
3839'-Wno-div-by-zero'
3840     Do not warn about compile-time integer division by zero.
3841     Floating-point division by zero is not warned about, as it can be a
3842     legitimate way of obtaining infinities and NaNs.
3843
3844'-Wsystem-headers'
3845     Print warning messages for constructs found in system header files.
3846     Warnings from system headers are normally suppressed, on the
3847     assumption that they usually do not indicate real problems and
3848     would only make the compiler output harder to read.  Using this
3849     command-line option tells GCC to emit warnings from system headers
3850     as if they occurred in user code.  However, note that using '-Wall'
3851     in conjunction with this option does _not_ warn about unknown
3852     pragmas in system headers--for that, '-Wunknown-pragmas' must also
3853     be used.
3854
3855'-Wtrampolines'
3856     Warn about trampolines generated for pointers to nested functions.
3857
3858     A trampoline is a small piece of data or code that is created at
3859     run time on the stack when the address of a nested function is
3860     taken, and is used to call the nested function indirectly.  For
3861     some targets, it is made up of data only and thus requires no
3862     special treatment.  But, for most targets, it is made up of code
3863     and thus requires the stack to be made executable in order for the
3864     program to work properly.
3865
3866'-Wfloat-equal'
3867     Warn if floating-point values are used in equality comparisons.
3868
3869     The idea behind this is that sometimes it is convenient (for the
3870     programmer) to consider floating-point values as approximations to
3871     infinitely precise real numbers.  If you are doing this, then you
3872     need to compute (by analyzing the code, or in some other way) the
3873     maximum or likely maximum error that the computation introduces,
3874     and allow for it when performing comparisons (and when producing
3875     output, but that's a different problem).  In particular, instead of
3876     testing for equality, you should check to see whether the two
3877     values have ranges that overlap; and this is done with the
3878     relational operators, so equality comparisons are probably
3879     mistaken.
3880
3881'-Wtraditional (C and Objective-C only)'
3882     Warn about certain constructs that behave differently in
3883     traditional and ISO C.  Also warn about ISO C constructs that have
3884     no traditional C equivalent, and/or problematic constructs that
3885     should be avoided.
3886
3887        * Macro parameters that appear within string literals in the
3888          macro body.  In traditional C macro replacement takes place
3889          within string literals, but in ISO C it does not.
3890
3891        * In traditional C, some preprocessor directives did not exist.
3892          Traditional preprocessors only considered a line to be a
3893          directive if the '#' appeared in column 1 on the line.
3894          Therefore '-Wtraditional' warns about directives that
3895          traditional C understands but ignores because the '#' does not
3896          appear as the first character on the line.  It also suggests
3897          you hide directives like '#pragma' not understood by
3898          traditional C by indenting them.  Some traditional
3899          implementations do not recognize '#elif', so this option
3900          suggests avoiding it altogether.
3901
3902        * A function-like macro that appears without arguments.
3903
3904        * The unary plus operator.
3905
3906        * The 'U' integer constant suffix, or the 'F' or 'L'
3907          floating-point constant suffixes.  (Traditional C does support
3908          the 'L' suffix on integer constants.)  Note, these suffixes
3909          appear in macros defined in the system headers of most modern
3910          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
3911          of these macros in user code might normally lead to spurious
3912          warnings, however GCC's integrated preprocessor has enough
3913          context to avoid warning in these cases.
3914
3915        * A function declared external in one block and then used after
3916          the end of the block.
3917
3918        * A 'switch' statement has an operand of type 'long'.
3919
3920        * A non-'static' function declaration follows a 'static' one.
3921          This construct is not accepted by some traditional C
3922          compilers.
3923
3924        * The ISO type of an integer constant has a different width or
3925          signedness from its traditional type.  This warning is only
3926          issued if the base of the constant is ten.  I.e. hexadecimal
3927          or octal values, which typically represent bit patterns, are
3928          not warned about.
3929
3930        * Usage of ISO string concatenation is detected.
3931
3932        * Initialization of automatic aggregates.
3933
3934        * Identifier conflicts with labels.  Traditional C lacks a
3935          separate namespace for labels.
3936
3937        * Initialization of unions.  If the initializer is zero, the
3938          warning is omitted.  This is done under the assumption that
3939          the zero initializer in user code appears conditioned on e.g.
3940          '__STDC__' to avoid missing initializer warnings and relies on
3941          default initialization to zero in the traditional C case.
3942
3943        * Conversions by prototypes between fixed/floating-point values
3944          and vice versa.  The absence of these prototypes when
3945          compiling with traditional C causes serious problems.  This is
3946          a subset of the possible conversion warnings; for the full set
3947          use '-Wtraditional-conversion'.
3948
3949        * Use of ISO C style function definitions.  This warning
3950          intentionally is _not_ issued for prototype declarations or
3951          variadic functions because these ISO C features appear in your
3952          code when using libiberty's traditional C compatibility
3953          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
3954          for nested functions because that feature is already a GCC
3955          extension and thus not relevant to traditional C
3956          compatibility.
3957
3958'-Wtraditional-conversion (C and Objective-C only)'
3959     Warn if a prototype causes a type conversion that is different from
3960     what would happen to the same argument in the absence of a
3961     prototype.  This includes conversions of fixed point to floating
3962     and vice versa, and conversions changing the width or signedness of
3963     a fixed-point argument except when the same as the default
3964     promotion.
3965
3966'-Wdeclaration-after-statement (C and Objective-C only)'
3967     Warn when a declaration is found after a statement in a block.
3968     This construct, known from C++, was introduced with ISO C99 and is
3969     by default allowed in GCC.  It is not supported by ISO C90 and was
3970     not supported by GCC versions before GCC 3.0.  *Note Mixed
3971     Declarations::.
3972
3973'-Wundef'
3974     Warn if an undefined identifier is evaluated in an '#if' directive.
3975
3976'-Wno-endif-labels'
3977     Do not warn whenever an '#else' or an '#endif' are followed by
3978     text.
3979
3980'-Wshadow'
3981     Warn whenever a local variable or type declaration shadows another
3982     variable, parameter, type, or class member (in C++), or whenever a
3983     built-in function is shadowed.  Note that in C++, the compiler
3984     warns if a local variable shadows an explicit typedef, but not if
3985     it shadows a struct/class/enum.
3986
3987'-Wlarger-than=LEN'
3988     Warn whenever an object of larger than LEN bytes is defined.
3989
3990'-Wframe-larger-than=LEN'
3991     Warn if the size of a function frame is larger than LEN bytes.  The
3992     computation done to determine the stack frame size is approximate
3993     and not conservative.  The actual requirements may be somewhat
3994     greater than LEN even if you do not get a warning.  In addition,
3995     any space allocated via 'alloca', variable-length arrays, or
3996     related constructs is not included by the compiler when determining
3997     whether or not to issue a warning.
3998
3999'-Wno-free-nonheap-object'
4000     Do not warn when attempting to free an object that was not
4001     allocated on the heap.
4002
4003'-Wstack-usage=LEN'
4004     Warn if the stack usage of a function might be larger than LEN
4005     bytes.  The computation done to determine the stack usage is
4006     conservative.  Any space allocated via 'alloca', variable-length
4007     arrays, or related constructs is included by the compiler when
4008     determining whether or not to issue a warning.
4009
4010     The message is in keeping with the output of '-fstack-usage'.
4011
4012        * If the stack usage is fully static but exceeds the specified
4013          amount, it's:
4014
4015                 warning: stack usage is 1120 bytes
4016        * If the stack usage is (partly) dynamic but bounded, it's:
4017
4018                 warning: stack usage might be 1648 bytes
4019        * If the stack usage is (partly) dynamic and not bounded, it's:
4020
4021                 warning: stack usage might be unbounded
4022
4023'-Wunsafe-loop-optimizations'
4024     Warn if the loop cannot be optimized because the compiler cannot
4025     assume anything on the bounds of the loop indices.  With
4026     '-funsafe-loop-optimizations' warn if the compiler makes such
4027     assumptions.
4028
4029'-Wno-pedantic-ms-format (MinGW targets only)'
4030     When used in combination with '-Wformat' and '-pedantic' without
4031     GNU extensions, this option disables the warnings about non-ISO
4032     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
4033     used on Windows targets, which depend on the MS runtime.
4034
4035'-Wpointer-arith'
4036     Warn about anything that depends on the "size of" a function type
4037     or of 'void'.  GNU C assigns these types a size of 1, for
4038     convenience in calculations with 'void *' pointers and pointers to
4039     functions.  In C++, warn also when an arithmetic operation involves
4040     'NULL'.  This warning is also enabled by '-Wpedantic'.
4041
4042'-Wtype-limits'
4043     Warn if a comparison is always true or always false due to the
4044     limited range of the data type, but do not warn for constant
4045     expressions.  For example, warn if an unsigned variable is compared
4046     against zero with '<' or '>='.  This warning is also enabled by
4047     '-Wextra'.
4048
4049'-Wbad-function-cast (C and Objective-C only)'
4050     Warn whenever a function call is cast to a non-matching type.  For
4051     example, warn if 'int malloc()' is cast to 'anything *'.
4052
4053'-Wc++-compat (C and Objective-C only)'
4054     Warn about ISO C constructs that are outside of the common subset
4055     of ISO C and ISO C++, e.g. request for implicit conversion from
4056     'void *' to a pointer to non-'void' type.
4057
4058'-Wc++11-compat (C++ and Objective-C++ only)'
4059     Warn about C++ constructs whose meaning differs between ISO C++
4060     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4061     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
4062     is enabled by '-Wall'.
4063
4064'-Wcast-qual'
4065     Warn whenever a pointer is cast so as to remove a type qualifier
4066     from the target type.  For example, warn if a 'const char *' is
4067     cast to an ordinary 'char *'.
4068
4069     Also warn when making a cast that introduces a type qualifier in an
4070     unsafe way.  For example, casting 'char **' to 'const char **' is
4071     unsafe, as in this example:
4072
4073            /* p is char ** value.  */
4074            const char **q = (const char **) p;
4075            /* Assignment of readonly string to const char * is OK.  */
4076            *q = "string";
4077            /* Now char** pointer points to read-only memory.  */
4078            **p = 'b';
4079
4080'-Wcast-align'
4081     Warn whenever a pointer is cast such that the required alignment of
4082     the target is increased.  For example, warn if a 'char *' is cast
4083     to an 'int *' on machines where integers can only be accessed at
4084     two- or four-byte boundaries.
4085
4086'-Wwrite-strings'
4087     When compiling C, give string constants the type 'const
4088     char[LENGTH]' so that copying the address of one into a non-'const'
4089     'char *' pointer produces a warning.  These warnings help you find
4090     at compile time code that can try to write into a string constant,
4091     but only if you have been very careful about using 'const' in
4092     declarations and prototypes.  Otherwise, it is just a nuisance.
4093     This is why we did not make '-Wall' request these warnings.
4094
4095     When compiling C++, warn about the deprecated conversion from
4096     string literals to 'char *'.  This warning is enabled by default
4097     for C++ programs.
4098
4099'-Wclobbered'
4100     Warn for variables that might be changed by 'longjmp' or 'vfork'.
4101     This warning is also enabled by '-Wextra'.
4102
4103'-Wconversion'
4104     Warn for implicit conversions that may alter a value.  This
4105     includes conversions between real and integer, like 'abs (x)' when
4106     'x' is 'double'; conversions between signed and unsigned, like
4107     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
4108     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
4109     'ui = (unsigned) -1', or if the value is not changed by the
4110     conversion like in 'abs (2.0)'.  Warnings about conversions between
4111     signed and unsigned integers can be disabled by using
4112     '-Wno-sign-conversion'.
4113
4114     For C++, also warn for confusing overload resolution for
4115     user-defined conversions; and conversions that never use a type
4116     conversion operator: conversions to 'void', the same type, a base
4117     class or a reference to them.  Warnings about conversions between
4118     signed and unsigned integers are disabled by default in C++ unless
4119     '-Wsign-conversion' is explicitly enabled.
4120
4121'-Wno-conversion-null (C++ and Objective-C++ only)'
4122     Do not warn for conversions between 'NULL' and non-pointer types.
4123     '-Wconversion-null' is enabled by default.
4124
4125'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4126     Warn when a literal '0' is used as null pointer constant.  This can
4127     be useful to facilitate the conversion to 'nullptr' in C++11.
4128
4129'-Wuseless-cast (C++ and Objective-C++ only)'
4130     Warn when an expression is casted to its own type.
4131
4132'-Wempty-body'
4133     Warn if an empty body occurs in an 'if', 'else' or 'do while'
4134     statement.  This warning is also enabled by '-Wextra'.
4135
4136'-Wenum-compare'
4137     Warn about a comparison between values of different enumerated
4138     types.  In C++ enumeral mismatches in conditional expressions are
4139     also diagnosed and the warning is enabled by default.  In C this
4140     warning is enabled by '-Wall'.
4141
4142'-Wjump-misses-init (C, Objective-C only)'
4143     Warn if a 'goto' statement or a 'switch' statement jumps forward
4144     across the initialization of a variable, or jumps backward to a
4145     label after the variable has been initialized.  This only warns
4146     about variables that are initialized when they are declared.  This
4147     warning is only supported for C and Objective-C; in C++ this sort
4148     of branch is an error in any case.
4149
4150     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
4151     disabled with the '-Wno-jump-misses-init' option.
4152
4153'-Wsign-compare'
4154     Warn when a comparison between signed and unsigned values could
4155     produce an incorrect result when the signed value is converted to
4156     unsigned.  This warning is also enabled by '-Wextra'; to get the
4157     other warnings of '-Wextra' without this warning, use '-Wextra
4158     -Wno-sign-compare'.
4159
4160'-Wsign-conversion'
4161     Warn for implicit conversions that may change the sign of an
4162     integer value, like assigning a signed integer expression to an
4163     unsigned integer variable.  An explicit cast silences the warning.
4164     In C, this option is enabled also by '-Wconversion'.
4165
4166'-Wsizeof-pointer-memaccess'
4167     Warn for suspicious length parameters to certain string and memory
4168     built-in functions if the argument uses 'sizeof'.  This warning
4169     warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not
4170     an array, but a pointer, and suggests a possible fix, or about
4171     'memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4172     '-Wall'.
4173
4174'-Waddress'
4175     Warn about suspicious uses of memory addresses.  These include
4176     using the address of a function in a conditional expression, such
4177     as 'void func(void); if (func)', and comparisons against the memory
4178     address of a string literal, such as 'if (x == "abc")'.  Such uses
4179     typically indicate a programmer error: the address of a function
4180     always evaluates to true, so their use in a conditional usually
4181     indicate that the programmer forgot the parentheses in a function
4182     call; and comparisons against string literals result in unspecified
4183     behavior and are not portable in C, so they usually indicate that
4184     the programmer intended to use 'strcmp'.  This warning is enabled
4185     by '-Wall'.
4186
4187'-Wlogical-op'
4188     Warn about suspicious uses of logical operators in expressions.
4189     This includes using logical operators in contexts where a bit-wise
4190     operator is likely to be expected.
4191
4192'-Waggregate-return'
4193     Warn if any functions that return structures or unions are defined
4194     or called.  (In languages where you can return an array, this also
4195     elicits a warning.)
4196
4197'-Wno-aggressive-loop-optimizations'
4198     Warn if in a loop with constant number of iterations the compiler
4199     detects undefined behavior in some statement during one or more of
4200     the iterations.
4201
4202'-Wno-attributes'
4203     Do not warn if an unexpected '__attribute__' is used, such as
4204     unrecognized attributes, function attributes applied to variables,
4205     etc.  This does not stop errors for incorrect use of supported
4206     attributes.
4207
4208'-Wno-builtin-macro-redefined'
4209     Do not warn if certain built-in macros are redefined.  This
4210     suppresses warnings for redefinition of '__TIMESTAMP__',
4211     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
4212
4213'-Wstrict-prototypes (C and Objective-C only)'
4214     Warn if a function is declared or defined without specifying the
4215     argument types.  (An old-style function definition is permitted
4216     without a warning if preceded by a declaration that specifies the
4217     argument types.)
4218
4219'-Wold-style-declaration (C and Objective-C only)'
4220     Warn for obsolescent usages, according to the C Standard, in a
4221     declaration.  For example, warn if storage-class specifiers like
4222     'static' are not the first things in a declaration.  This warning
4223     is also enabled by '-Wextra'.
4224
4225'-Wold-style-definition (C and Objective-C only)'
4226     Warn if an old-style function definition is used.  A warning is
4227     given even if there is a previous prototype.
4228
4229'-Wmissing-parameter-type (C and Objective-C only)'
4230     A function parameter is declared without a type specifier in
4231     K&R-style functions:
4232
4233          void foo(bar) { }
4234
4235     This warning is also enabled by '-Wextra'.
4236
4237'-Wmissing-prototypes (C and Objective-C only)'
4238     Warn if a global function is defined without a previous prototype
4239     declaration.  This warning is issued even if the definition itself
4240     provides a prototype.  Use this option to detect global functions
4241     that do not have a matching prototype declaration in a header file.
4242     This option is not valid for C++ because all function declarations
4243     provide prototypes and a non-matching declaration will declare an
4244     overload rather than conflict with an earlier declaration.  Use
4245     '-Wmissing-declarations' to detect missing declarations in C++.
4246
4247'-Wmissing-declarations'
4248     Warn if a global function is defined without a previous
4249     declaration.  Do so even if the definition itself provides a
4250     prototype.  Use this option to detect global functions that are not
4251     declared in header files.  In C, no warnings are issued for
4252     functions with previous non-prototype declarations; use
4253     '-Wmissing-prototype' to detect missing prototypes.  In C++, no
4254     warnings are issued for function templates, or for inline
4255     functions, or for functions in anonymous namespaces.
4256
4257'-Wmissing-field-initializers'
4258     Warn if a structure's initializer has some fields missing.  For
4259     example, the following code causes such a warning, because 'x.h' is
4260     implicitly zero:
4261
4262          struct s { int f, g, h; };
4263          struct s x = { 3, 4 };
4264
4265     This option does not warn about designated initializers, so the
4266     following modification does not trigger a warning:
4267
4268          struct s { int f, g, h; };
4269          struct s x = { .f = 3, .g = 4 };
4270
4271     This warning is included in '-Wextra'.  To get other '-Wextra'
4272     warnings without this one, use '-Wextra
4273     -Wno-missing-field-initializers'.
4274
4275'-Wno-multichar'
4276     Do not warn if a multicharacter constant (''FOOF'') is used.
4277     Usually they indicate a typo in the user's code, as they have
4278     implementation-defined values, and should not be used in portable
4279     code.
4280
4281'-Wnormalized=<none|id|nfc|nfkc>'
4282     In ISO C and ISO C++, two identifiers are different if they are
4283     different sequences of characters.  However, sometimes when
4284     characters outside the basic ASCII character set are used, you can
4285     have two different character sequences that look the same.  To
4286     avoid confusion, the ISO 10646 standard sets out some
4287     "normalization rules" which when applied ensure that two sequences
4288     that look the same are turned into the same sequence.  GCC can warn
4289     you if you are using identifiers that have not been normalized;
4290     this option controls that warning.
4291
4292     There are four levels of warning supported by GCC.  The default is
4293     '-Wnormalized=nfc', which warns about any identifier that is not in
4294     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
4295     form for most uses.
4296
4297     Unfortunately, there are some characters allowed in identifiers by
4298     ISO C and ISO C++ that, when turned into NFC, are not allowed in
4299     identifiers.  That is, there's no way to use these symbols in
4300     portable ISO C or C++ and have all your identifiers in NFC.
4301     '-Wnormalized=id' suppresses the warning for these characters.  It
4302     is hoped that future versions of the standards involved will
4303     correct this, which is why this option is not the default.
4304
4305     You can switch the warning off for all characters by writing
4306     '-Wnormalized=none'.  You should only do this if you are using some
4307     other normalization scheme (like "D"), because otherwise you can
4308     easily create bugs that are literally impossible to see.
4309
4310     Some characters in ISO 10646 have distinct meanings but look
4311     identical in some fonts or display methodologies, especially once
4312     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
4313     LATIN SMALL LETTER N", displays just like a regular 'n' that has
4314     been placed in a superscript.  ISO 10646 defines the "NFKC"
4315     normalization scheme to convert all these into a standard form as
4316     well, and GCC warns if your code is not in NFKC if you use
4317     '-Wnormalized=nfkc'.  This warning is comparable to warning about
4318     every identifier that contains the letter O because it might be
4319     confused with the digit 0, and so is not the default, but may be
4320     useful as a local coding convention if the programming environment
4321     cannot be fixed to display these characters distinctly.
4322
4323'-Wno-deprecated'
4324     Do not warn about usage of deprecated features.  *Note Deprecated
4325     Features::.
4326
4327'-Wno-deprecated-declarations'
4328     Do not warn about uses of functions (*note Function Attributes::),
4329     variables (*note Variable Attributes::), and types (*note Type
4330     Attributes::) marked as deprecated by using the 'deprecated'
4331     attribute.
4332
4333'-Wno-overflow'
4334     Do not warn about compile-time overflow in constant expressions.
4335
4336'-Woverride-init (C and Objective-C only)'
4337     Warn if an initialized field without side effects is overridden
4338     when using designated initializers (*note Designated Initializers:
4339     Designated Inits.).
4340
4341     This warning is included in '-Wextra'.  To get other '-Wextra'
4342     warnings without this one, use '-Wextra -Wno-override-init'.
4343
4344'-Wpacked'
4345     Warn if a structure is given the packed attribute, but the packed
4346     attribute has no effect on the layout or size of the structure.
4347     Such structures may be mis-aligned for little benefit.  For
4348     instance, in this code, the variable 'f.x' in 'struct bar' is
4349     misaligned even though 'struct bar' does not itself have the packed
4350     attribute:
4351
4352          struct foo {
4353            int x;
4354            char a, b, c, d;
4355          } __attribute__((packed));
4356          struct bar {
4357            char z;
4358            struct foo f;
4359          };
4360
4361'-Wpacked-bitfield-compat'
4362     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
4363     bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
4364     change can lead to differences in the structure layout.  GCC
4365     informs you when the offset of such a field has changed in GCC 4.4.
4366     For example there is no longer a 4-bit padding between field 'a'
4367     and 'b' in this structure:
4368
4369          struct foo
4370          {
4371            char a:4;
4372            char b:8;
4373          } __attribute__ ((packed));
4374
4375     This warning is enabled by default.  Use
4376     '-Wno-packed-bitfield-compat' to disable this warning.
4377
4378'-Wpadded'
4379     Warn if padding is included in a structure, either to align an
4380     element of the structure or to align the whole structure.
4381     Sometimes when this happens it is possible to rearrange the fields
4382     of the structure to reduce the padding and so make the structure
4383     smaller.
4384
4385'-Wredundant-decls'
4386     Warn if anything is declared more than once in the same scope, even
4387     in cases where multiple declaration is valid and changes nothing.
4388
4389'-Wnested-externs (C and Objective-C only)'
4390     Warn if an 'extern' declaration is encountered within a function.
4391
4392'-Wno-inherited-variadic-ctor'
4393     Suppress warnings about use of C++11 inheriting constructors when
4394     the base class inherited from has a C variadic constructor; the
4395     warning is on by default because the ellipsis is not inherited.
4396
4397'-Winline'
4398     Warn if a function that is declared as inline cannot be inlined.
4399     Even with this option, the compiler does not warn about failures to
4400     inline functions declared in system headers.
4401
4402     The compiler uses a variety of heuristics to determine whether or
4403     not to inline a function.  For example, the compiler takes into
4404     account the size of the function being inlined and the amount of
4405     inlining that has already been done in the current function.
4406     Therefore, seemingly insignificant changes in the source program
4407     can cause the warnings produced by '-Winline' to appear or
4408     disappear.
4409
4410'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4411     Suppress warnings from applying the 'offsetof' macro to a non-POD
4412     type.  According to the 1998 ISO C++ standard, applying 'offsetof'
4413     to a non-POD type is undefined.  In existing C++ implementations,
4414     however, 'offsetof' typically gives meaningful results even when
4415     applied to certain kinds of non-POD types (such as a simple
4416     'struct' that fails to be a POD type only by virtue of having a
4417     constructor).  This flag is for users who are aware that they are
4418     writing nonportable code and who have deliberately chosen to ignore
4419     the warning about it.
4420
4421     The restrictions on 'offsetof' may be relaxed in a future version
4422     of the C++ standard.
4423
4424'-Wno-int-to-pointer-cast'
4425     Suppress warnings from casts to pointer type of an integer of a
4426     different size.  In C++, casting to a pointer type of smaller size
4427     is an error.  'Wint-to-pointer-cast' is enabled by default.
4428
4429'-Wno-pointer-to-int-cast (C and Objective-C only)'
4430     Suppress warnings from casts from a pointer to an integer type of a
4431     different size.
4432
4433'-Winvalid-pch'
4434     Warn if a precompiled header (*note Precompiled Headers::) is found
4435     in the search path but can't be used.
4436
4437'-Wlong-long'
4438     Warn if 'long long' type is used.  This is enabled by either
4439     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
4440     inhibit the warning messages, use '-Wno-long-long'.
4441
4442'-Wvariadic-macros'
4443     Warn if variadic macros are used in pedantic ISO C90 mode, or the
4444     GNU alternate syntax when in pedantic ISO C99 mode.  This is
4445     default.  To inhibit the warning messages, use
4446     '-Wno-variadic-macros'.
4447
4448'-Wvarargs'
4449     Warn upon questionable usage of the macros used to handle variable
4450     arguments like 'va_start'.  This is default.  To inhibit the
4451     warning messages, use '-Wno-varargs'.
4452
4453'-Wvector-operation-performance'
4454     Warn if vector operation is not implemented via SIMD capabilities
4455     of the architecture.  Mainly useful for the performance tuning.
4456     Vector operation can be implemented 'piecewise', which means that
4457     the scalar operation is performed on every vector element; 'in
4458     parallel', which means that the vector operation is implemented
4459     using scalars of wider type, which normally is more performance
4460     efficient; and 'as a single scalar', which means that vector fits
4461     into a scalar type.
4462
4463'-Wno-virtual-move-assign'
4464     Suppress warnings about inheriting from a virtual base with a
4465     non-trivial C++11 move assignment operator.  This is dangerous
4466     because if the virtual base is reachable along more than one path,
4467     it will be moved multiple times, which can mean both objects end up
4468     in the moved-from state.  If the move assignment operator is
4469     written to avoid moving from a moved-from object, this warning can
4470     be disabled.
4471
4472'-Wvla'
4473     Warn if variable length array is used in the code.  '-Wno-vla'
4474     prevents the '-Wpedantic' warning of the variable length array.
4475
4476'-Wvolatile-register-var'
4477     Warn if a register variable is declared volatile.  The volatile
4478     modifier does not inhibit all optimizations that may eliminate
4479     reads and/or writes to register variables.  This warning is enabled
4480     by '-Wall'.
4481
4482'-Wdisabled-optimization'
4483     Warn if a requested optimization pass is disabled.  This warning
4484     does not generally indicate that there is anything wrong with your
4485     code; it merely indicates that GCC's optimizers are unable to
4486     handle the code effectively.  Often, the problem is that your code
4487     is too big or too complex; GCC refuses to optimize programs when
4488     the optimization itself is likely to take inordinate amounts of
4489     time.
4490
4491'-Wpointer-sign (C and Objective-C only)'
4492     Warn for pointer argument passing or assignment with different
4493     signedness.  This option is only supported for C and Objective-C.
4494     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
4495     with '-Wno-pointer-sign'.
4496
4497'-Wstack-protector'
4498     This option is only active when '-fstack-protector' is active.  It
4499     warns about functions that are not protected against stack
4500     smashing.
4501
4502'-Wno-mudflap'
4503     Suppress warnings about constructs that cannot be instrumented by
4504     '-fmudflap'.
4505
4506'-Woverlength-strings'
4507     Warn about string constants that are longer than the "minimum
4508     maximum" length specified in the C standard.  Modern compilers
4509     generally allow string constants that are much longer than the
4510     standard's minimum limit, but very portable programs should avoid
4511     using longer strings.
4512
4513     The limit applies _after_ string constant concatenation, and does
4514     not count the trailing NUL.  In C90, the limit was 509 characters;
4515     in C99, it was raised to 4095.  C++98 does not specify a normative
4516     minimum maximum, so we do not diagnose overlength strings in C++.
4517
4518     This option is implied by '-Wpedantic', and can be disabled with
4519     '-Wno-overlength-strings'.
4520
4521'-Wunsuffixed-float-constants (C and Objective-C only)'
4522
4523     Issue a warning for any floating constant that does not have a
4524     suffix.  When used together with '-Wsystem-headers' it warns about
4525     such constants in system header files.  This can be useful when
4526     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
4527     the decimal floating-point extension to C99.
4528
4529
4530File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4531
45323.9 Options for Debugging Your Program or GCC
4533=============================================
4534
4535GCC has various special options that are used for debugging either your
4536program or GCC:
4537
4538'-g'
4539     Produce debugging information in the operating system's native
4540     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4541     debugging information.
4542
4543     On most systems that use stabs format, '-g' enables use of extra
4544     debugging information that only GDB can use; this extra information
4545     makes debugging work better in GDB but probably makes other
4546     debuggers crash or refuse to read the program.  If you want to
4547     control for certain whether to generate the extra information, use
4548     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
4549     below).
4550
4551     GCC allows you to use '-g' with '-O'.  The shortcuts taken by
4552     optimized code may occasionally produce surprising results: some
4553     variables you declared may not exist at all; flow of control may
4554     briefly move where you did not expect it; some statements may not
4555     be executed because they compute constant results or their values
4556     are already at hand; some statements may execute in different
4557     places because they have been moved out of loops.
4558
4559     Nevertheless it proves possible to debug optimized output.  This
4560     makes it reasonable to use the optimizer for programs that might
4561     have bugs.
4562
4563     The following options are useful when GCC is generated with the
4564     capability for more than one debugging format.
4565
4566'-gsplit-dwarf'
4567     Separate as much dwarf debugging information as possible into a
4568     separate output file with the extension .dwo.  This option allows
4569     the build system to avoid linking files with debug information.  To
4570     be useful, this option requires a debugger capable of reading .dwo
4571     files.
4572
4573'-ggdb'
4574     Produce debugging information for use by GDB.  This means to use
4575     the most expressive format available (DWARF 2, stabs, or the native
4576     format if neither of those are supported), including GDB extensions
4577     if at all possible.
4578
4579'-gpubnames'
4580     Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4581
4582'-gstabs'
4583     Produce debugging information in stabs format (if that is
4584     supported), without GDB extensions.  This is the format used by DBX
4585     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
4586     this option produces stabs debugging output that is not understood
4587     by DBX or SDB.  On System V Release 4 systems this option requires
4588     the GNU assembler.
4589
4590'-feliminate-unused-debug-symbols'
4591     Produce debugging information in stabs format (if that is
4592     supported), for only symbols that are actually used.
4593
4594'-femit-class-debug-always'
4595     Instead of emitting debugging information for a C++ class in only
4596     one object file, emit it in all object files using the class.  This
4597     option should be used only with debuggers that are unable to handle
4598     the way GCC normally emits debugging information for classes
4599     because using this option increases the size of debugging
4600     information by as much as a factor of two.
4601
4602'-fdebug-types-section'
4603     When using DWARF Version 4 or higher, type DIEs can be put into
4604     their own '.debug_types' section instead of making them part of the
4605     '.debug_info' section.  It is more efficient to put them in a
4606     separate comdat sections since the linker can then remove
4607     duplicates.  But not all DWARF consumers support '.debug_types'
4608     sections yet and on some objects '.debug_types' produces larger
4609     instead of smaller debugging information.
4610
4611'-gstabs+'
4612     Produce debugging information in stabs format (if that is
4613     supported), using GNU extensions understood only by the GNU
4614     debugger (GDB).  The use of these extensions is likely to make
4615     other debuggers crash or refuse to read the program.
4616
4617'-gcoff'
4618     Produce debugging information in COFF format (if that is
4619     supported).  This is the format used by SDB on most System V
4620     systems prior to System V Release 4.
4621
4622'-gxcoff'
4623     Produce debugging information in XCOFF format (if that is
4624     supported).  This is the format used by the DBX debugger on IBM
4625     RS/6000 systems.
4626
4627'-gxcoff+'
4628     Produce debugging information in XCOFF format (if that is
4629     supported), using GNU extensions understood only by the GNU
4630     debugger (GDB).  The use of these extensions is likely to make
4631     other debuggers crash or refuse to read the program, and may cause
4632     assemblers other than the GNU assembler (GAS) to fail with an
4633     error.
4634
4635'-gdwarf-VERSION'
4636     Produce debugging information in DWARF format (if that is
4637     supported).  The value of VERSION may be either 2, 3 or 4; the
4638     default version for most targets is 4.
4639
4640     Note that with DWARF Version 2, some ports require and always use
4641     some non-conflicting DWARF 3 extensions in the unwind tables.
4642
4643     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
4644     maximum benefit.
4645
4646'-grecord-gcc-switches'
4647     This switch causes the command-line options used to invoke the
4648     compiler that may affect code generation to be appended to the
4649     DW_AT_producer attribute in DWARF debugging information.  The
4650     options are concatenated with spaces separating them from each
4651     other and from the compiler version.  See also
4652     '-frecord-gcc-switches' for another way of storing compiler options
4653     into the object file.  This is the default.
4654
4655'-gno-record-gcc-switches'
4656     Disallow appending command-line options to the DW_AT_producer
4657     attribute in DWARF debugging information.
4658
4659'-gstrict-dwarf'
4660     Disallow using extensions of later DWARF standard version than
4661     selected with '-gdwarf-VERSION'.  On most targets using
4662     non-conflicting DWARF extensions from later standard versions is
4663     allowed.
4664
4665'-gno-strict-dwarf'
4666     Allow using extensions of later DWARF standard version than
4667     selected with '-gdwarf-VERSION'.
4668
4669'-gvms'
4670     Produce debugging information in Alpha/VMS debug format (if that is
4671     supported).  This is the format used by DEBUG on Alpha/VMS systems.
4672
4673'-gLEVEL'
4674'-ggdbLEVEL'
4675'-gstabsLEVEL'
4676'-gcoffLEVEL'
4677'-gxcoffLEVEL'
4678'-gvmsLEVEL'
4679     Request debugging information and also use LEVEL to specify how
4680     much information.  The default level is 2.
4681
4682     Level 0 produces no debug information at all.  Thus, '-g0' negates
4683     '-g'.
4684
4685     Level 1 produces minimal information, enough for making backtraces
4686     in parts of the program that you don't plan to debug.  This
4687     includes descriptions of functions and external variables, but no
4688     information about local variables and no line numbers.
4689
4690     Level 3 includes extra information, such as all the macro
4691     definitions present in the program.  Some debuggers support macro
4692     expansion when you use '-g3'.
4693
4694     '-gdwarf-2' does not accept a concatenated debug level, because GCC
4695     used to support an option '-gdwarf' that meant to generate debug
4696     information in version 1 of the DWARF format (which is very
4697     different from version 2), and it would have been too confusing.
4698     That debug format is long obsolete, but the option cannot be
4699     changed now.  Instead use an additional '-gLEVEL' option to change
4700     the debug level for DWARF.
4701
4702'-gtoggle'
4703     Turn off generation of debug info, if leaving out this option
4704     generates it, or turn it on at level 2 otherwise.  The position of
4705     this argument in the command line does not matter; it takes effect
4706     after all other options are processed, and it does so only once, no
4707     matter how many times it is given.  This is mainly intended to be
4708     used with '-fcompare-debug'.
4709
4710'-fsanitize=address'
4711     Enable AddressSanitizer, a fast memory error detector.  Memory
4712     access instructions will be instrumented to detect out-of-bounds
4713     and use-after-free bugs.  See
4714     <http://code.google.com/p/address-sanitizer/> for more details.
4715
4716'-fsanitize=thread'
4717     Enable ThreadSanitizer, a fast data race detector.  Memory access
4718     instructions will be instrumented to detect data race bugs.  See
4719     <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for
4720     more details.
4721
4722'-fdump-final-insns[=FILE]'
4723     Dump the final internal representation (RTL) to FILE.  If the
4724     optional argument is omitted (or if FILE is '.'), the name of the
4725     dump file is determined by appending '.gkd' to the compilation
4726     output file name.
4727
4728'-fcompare-debug[=OPTS]'
4729     If no error occurs during compilation, run the compiler a second
4730     time, adding OPTS and '-fcompare-debug-second' to the arguments
4731     passed to the second compilation.  Dump the final internal
4732     representation in both compilations, and print an error if they
4733     differ.
4734
4735     If the equal sign is omitted, the default '-gtoggle' is used.
4736
4737     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
4738     and nonzero, implicitly enables '-fcompare-debug'.  If
4739     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
4740     then it is used for OPTS, otherwise the default '-gtoggle' is used.
4741
4742     '-fcompare-debug=', with the equal sign but without OPTS, is
4743     equivalent to '-fno-compare-debug', which disables the dumping of
4744     the final representation and the second compilation, preventing
4745     even 'GCC_COMPARE_DEBUG' from taking effect.
4746
4747     To verify full coverage during '-fcompare-debug' testing, set
4748     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
4749     GCC rejects as an invalid option in any actual compilation (rather
4750     than preprocessing, assembly or linking).  To get just a warning,
4751     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
4752     will do.
4753
4754'-fcompare-debug-second'
4755     This option is implicitly passed to the compiler for the second
4756     compilation requested by '-fcompare-debug', along with options to
4757     silence warnings, and omitting other options that would cause
4758     side-effect compiler outputs to files or to the standard output.
4759     Dump files and preserved temporary files are renamed so as to
4760     contain the '.gk' additional extension during the second
4761     compilation, to avoid overwriting those generated by the first.
4762
4763     When this option is passed to the compiler driver, it causes the
4764     _first_ compilation to be skipped, which makes it useful for little
4765     other than debugging the compiler proper.
4766
4767'-feliminate-dwarf2-dups'
4768     Compress DWARF 2 debugging information by eliminating duplicated
4769     information about each symbol.  This option only makes sense when
4770     generating DWARF 2 debugging information with '-gdwarf-2'.
4771
4772'-femit-struct-debug-baseonly'
4773     Emit debug information for struct-like types only when the base
4774     name of the compilation source file matches the base name of file
4775     in which the struct is defined.
4776
4777     This option substantially reduces the size of debugging
4778     information, but at significant potential loss in type information
4779     to the debugger.  See '-femit-struct-debug-reduced' for a less
4780     aggressive option.  See '-femit-struct-debug-detailed' for more
4781     detailed control.
4782
4783     This option works only with DWARF 2.
4784
4785'-femit-struct-debug-reduced'
4786     Emit debug information for struct-like types only when the base
4787     name of the compilation source file matches the base name of file
4788     in which the type is defined, unless the struct is a template or
4789     defined in a system header.
4790
4791     This option significantly reduces the size of debugging
4792     information, with some potential loss in type information to the
4793     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
4794     option.  See '-femit-struct-debug-detailed' for more detailed
4795     control.
4796
4797     This option works only with DWARF 2.
4798
4799'-femit-struct-debug-detailed[=SPEC-LIST]'
4800     Specify the struct-like types for which the compiler generates
4801     debug information.  The intent is to reduce duplicate struct debug
4802     information between different object files within the same program.
4803
4804     This option is a detailed version of '-femit-struct-debug-reduced'
4805     and '-femit-struct-debug-baseonly', which serves for most needs.
4806
4807     A specification has the syntax
4808     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
4809
4810     The optional first word limits the specification to structs that
4811     are used directly ('dir:') or used indirectly ('ind:').  A struct
4812     type is used directly when it is the type of a variable, member.
4813     Indirect uses arise through pointers to structs.  That is, when use
4814     of an incomplete struct is valid, the use is indirect.  An example
4815     is 'struct one direct; struct two * indirect;'.
4816
4817     The optional second word limits the specification to ordinary
4818     structs ('ord:') or generic structs ('gen:').  Generic structs are
4819     a bit complicated to explain.  For C++, these are non-explicit
4820     specializations of template classes, or non-template classes within
4821     the above.  Other programming languages have generics, but
4822     '-femit-struct-debug-detailed' does not yet implement them.
4823
4824     The third word specifies the source files for those structs for
4825     which the compiler should emit debug information.  The values
4826     'none' and 'any' have the normal meaning.  The value 'base' means
4827     that the base of name of the file in which the type declaration
4828     appears must match the base of the name of the main compilation
4829     file.  In practice, this means that when compiling 'foo.c', debug
4830     information is generated for types declared in that file and
4831     'foo.h', but not other header files.  The value 'sys' means those
4832     types satisfying 'base' or declared in system or compiler headers.
4833
4834     You may need to experiment to determine the best settings for your
4835     application.
4836
4837     The default is '-femit-struct-debug-detailed=all'.
4838
4839     This option works only with DWARF 2.
4840
4841'-fno-merge-debug-strings'
4842     Direct the linker to not merge together strings in the debugging
4843     information that are identical in different object files.  Merging
4844     is not supported by all assemblers or linkers.  Merging decreases
4845     the size of the debug information in the output file at the cost of
4846     increasing link processing time.  Merging is enabled by default.
4847
4848'-fdebug-prefix-map=OLD=NEW'
4849     When compiling files in directory 'OLD', record debugging
4850     information describing them as in 'NEW' instead.
4851
4852'-fno-dwarf2-cfi-asm'
4853     Emit DWARF 2 unwind info as compiler generated '.eh_frame' section
4854     instead of using GAS '.cfi_*' directives.
4855
4856'-p'
4857     Generate extra code to write profile information suitable for the
4858     analysis program 'prof'.  You must use this option when compiling
4859     the source files you want data about, and you must also use it when
4860     linking.
4861
4862'-pg'
4863     Generate extra code to write profile information suitable for the
4864     analysis program 'gprof'.  You must use this option when compiling
4865     the source files you want data about, and you must also use it when
4866     linking.
4867
4868'-Q'
4869     Makes the compiler print out each function name as it is compiled,
4870     and print some statistics about each pass when it finishes.
4871
4872'-ftime-report'
4873     Makes the compiler print some statistics about the time consumed by
4874     each pass when it finishes.
4875
4876'-fmem-report'
4877     Makes the compiler print some statistics about permanent memory
4878     allocation when it finishes.
4879
4880'-fmem-report-wpa'
4881     Makes the compiler print some statistics about permanent memory
4882     allocation for the WPA phase only.
4883
4884'-fpre-ipa-mem-report'
4885'-fpost-ipa-mem-report'
4886     Makes the compiler print some statistics about permanent memory
4887     allocation before or after interprocedural optimization.
4888
4889'-fprofile-report'
4890     Makes the compiler print some statistics about consistency of the
4891     (estimated) profile and effect of individual passes.
4892
4893'-fstack-usage'
4894     Makes the compiler output stack usage information for the program,
4895     on a per-function basis.  The filename for the dump is made by
4896     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
4897     of the output file, if explicitly specified and it is not an
4898     executable, otherwise it is the basename of the source file.  An
4899     entry is made up of three fields:
4900
4901        * The name of the function.
4902        * A number of bytes.
4903        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
4904
4905     The qualifier 'static' means that the function manipulates the
4906     stack statically: a fixed number of bytes are allocated for the
4907     frame on function entry and released on function exit; no stack
4908     adjustments are otherwise made in the function.  The second field
4909     is this fixed number of bytes.
4910
4911     The qualifier 'dynamic' means that the function manipulates the
4912     stack dynamically: in addition to the static allocation described
4913     above, stack adjustments are made in the body of the function, for
4914     example to push/pop arguments around function calls.  If the
4915     qualifier 'bounded' is also present, the amount of these
4916     adjustments is bounded at compile time and the second field is an
4917     upper bound of the total amount of stack used by the function.  If
4918     it is not present, the amount of these adjustments is not bounded
4919     at compile time and the second field only represents the bounded
4920     part.
4921
4922'-fprofile-arcs'
4923     Add code so that program flow "arcs" are instrumented.  During
4924     execution the program records how many times each branch and call
4925     is executed and how many times it is taken or returns.  When the
4926     compiled program exits it saves this data to a file called
4927     'AUXNAME.gcda' for each source file.  The data may be used for
4928     profile-directed optimizations ('-fbranch-probabilities'), or for
4929     test coverage analysis ('-ftest-coverage').  Each object file's
4930     AUXNAME is generated from the name of the output file, if
4931     explicitly specified and it is not the final executable, otherwise
4932     it is the basename of the source file.  In both cases any suffix is
4933     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
4934     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
4935     Cross-profiling::.
4936
4937'--coverage'
4938
4939     This option is used to compile and link code instrumented for
4940     coverage analysis.  The option is a synonym for '-fprofile-arcs'
4941     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
4942     See the documentation for those options for more details.
4943
4944        * Compile the source files with '-fprofile-arcs' plus
4945          optimization and code generation options.  For test coverage
4946          analysis, use the additional '-ftest-coverage' option.  You do
4947          not need to profile every source file in a program.
4948
4949        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
4950          latter implies the former).
4951
4952        * Run the program on a representative workload to generate the
4953          arc profile information.  This may be repeated any number of
4954          times.  You can run concurrent instances of your program, and
4955          provided that the file system supports locking, the data files
4956          will be correctly updated.  Also 'fork' calls are detected and
4957          correctly handled (double counting will not happen).
4958
4959        * For profile-directed optimizations, compile the source files
4960          again with the same optimization and code generation options
4961          plus '-fbranch-probabilities' (*note Options that Control
4962          Optimization: Optimize Options.).
4963
4964        * For test coverage analysis, use 'gcov' to produce human
4965          readable information from the '.gcno' and '.gcda' files.
4966          Refer to the 'gcov' documentation for further information.
4967
4968     With '-fprofile-arcs', for each function of your program GCC
4969     creates a program flow graph, then finds a spanning tree for the
4970     graph.  Only arcs that are not on the spanning tree have to be
4971     instrumented: the compiler adds code to count the number of times
4972     that these arcs are executed.  When an arc is the only exit or only
4973     entrance to a block, the instrumentation code can be added to the
4974     block; otherwise, a new basic block must be created to hold the
4975     instrumentation code.
4976
4977'-ftest-coverage'
4978     Produce a notes file that the 'gcov' code-coverage utility (*note
4979     'gcov'--a Test Coverage Program: Gcov.) can use to show program
4980     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
4981     Refer to the '-fprofile-arcs' option above for a description of
4982     AUXNAME and instructions on how to generate test coverage data.
4983     Coverage data matches the source files more closely if you do not
4984     optimize.
4985
4986'-fdbg-cnt-list'
4987     Print the name and the counter upper bound for all debug counters.
4988
4989'-fdbg-cnt=COUNTER-VALUE-LIST'
4990     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
4991     a comma-separated list of NAME:VALUE pairs which sets the upper
4992     bound of each debug counter NAME to VALUE.  All debug counters have
4993     the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns
4994     true always unless the upper bound is set by this option.  For
4995     example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)'
4996     returns true only for first 10 invocations.
4997
4998'-fenable-KIND-PASS'
4999'-fdisable-KIND-PASS=RANGE-LIST'
5000
5001     This is a set of options that are used to explicitly disable/enable
5002     optimization passes.  These options are intended for use for
5003     debugging GCC. Compiler users should use regular options for
5004     enabling/disabling passes instead.
5005
5006     '-fdisable-ipa-PASS'
5007          Disable IPA pass PASS.  PASS is the pass name.  If the same
5008          pass is statically invoked in the compiler multiple times, the
5009          pass name should be appended with a sequential number starting
5010          from 1.
5011
5012     '-fdisable-rtl-PASS'
5013     '-fdisable-rtl-PASS=RANGE-LIST'
5014          Disable RTL pass PASS.  PASS is the pass name.  If the same
5015          pass is statically invoked in the compiler multiple times, the
5016          pass name should be appended with a sequential number starting
5017          from 1.  RANGE-LIST is a comma-separated list of function
5018          ranges or assembler names.  Each range is a number pair
5019          separated by a colon.  The range is inclusive in both ends.
5020          If the range is trivial, the number pair can be simplified as
5021          a single number.  If the function's call graph node's UID
5022          falls within one of the specified ranges, the PASS is disabled
5023          for that function.  The UID is shown in the function header of
5024          a dump file, and the pass names can be dumped by using option
5025          '-fdump-passes'.
5026
5027     '-fdisable-tree-PASS'
5028     '-fdisable-tree-PASS=RANGE-LIST'
5029          Disable tree pass PASS.  See '-fdisable-rtl' for the
5030          description of option arguments.
5031
5032     '-fenable-ipa-PASS'
5033          Enable IPA pass PASS.  PASS is the pass name.  If the same
5034          pass is statically invoked in the compiler multiple times, the
5035          pass name should be appended with a sequential number starting
5036          from 1.
5037
5038     '-fenable-rtl-PASS'
5039     '-fenable-rtl-PASS=RANGE-LIST'
5040          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
5041          description and examples.
5042
5043     '-fenable-tree-PASS'
5044     '-fenable-tree-PASS=RANGE-LIST'
5045          Enable tree pass PASS.  See '-fdisable-rtl' for the
5046          description of option arguments.
5047
5048     Here are some examples showing uses of these options.
5049
5050
5051          # disable ccp1 for all functions
5052             -fdisable-tree-ccp1
5053          # disable complete unroll for function whose cgraph node uid is 1
5054             -fenable-tree-cunroll=1
5055          # disable gcse2 for functions at the following ranges [1,1],
5056          # [300,400], and [400,1000]
5057          # disable gcse2 for functions foo and foo2
5058             -fdisable-rtl-gcse2=foo,foo2
5059          # disable early inlining
5060             -fdisable-tree-einline
5061          # disable ipa inlining
5062             -fdisable-ipa-inline
5063          # enable tree full unroll
5064             -fenable-tree-unroll
5065
5066
5067'-dLETTERS'
5068'-fdump-rtl-PASS'
5069'-fdump-rtl-PASS=FILENAME'
5070     Says to make debugging dumps during compilation at times specified
5071     by LETTERS.  This is used for debugging the RTL-based passes of the
5072     compiler.  The file names for most of the dumps are made by
5073     appending a pass number and a word to the DUMPNAME, and the files
5074     are created in the directory of the output file.  In case of
5075     '=FILENAME' option, the dump is output on the given file instead of
5076     the pass numbered dump files.  Note that the pass number is
5077     computed statically as passes get registered into the pass manager.
5078     Thus the numbering is not related to the dynamic order of execution
5079     of passes.  In particular, a pass installed by a plugin could have
5080     a number over 200 even if it executed quite early.  DUMPNAME is
5081     generated from the name of the output file, if explicitly specified
5082     and it is not an executable, otherwise it is the basename of the
5083     source file.  These switches may have different effects when '-E'
5084     is used for preprocessing.
5085
5086     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
5087     option LETTERS.  Here are the possible letters for use in PASS and
5088     LETTERS, and their meanings:
5089
5090     '-fdump-rtl-alignments'
5091          Dump after branch alignments have been computed.
5092
5093     '-fdump-rtl-asmcons'
5094          Dump after fixing rtl statements that have unsatisfied in/out
5095          constraints.
5096
5097     '-fdump-rtl-auto_inc_dec'
5098          Dump after auto-inc-dec discovery.  This pass is only run on
5099          architectures that have auto inc or auto dec instructions.
5100
5101     '-fdump-rtl-barriers'
5102          Dump after cleaning up the barrier instructions.
5103
5104     '-fdump-rtl-bbpart'
5105          Dump after partitioning hot and cold basic blocks.
5106
5107     '-fdump-rtl-bbro'
5108          Dump after block reordering.
5109
5110     '-fdump-rtl-btl1'
5111     '-fdump-rtl-btl2'
5112          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
5113          the two branch target load optimization passes.
5114
5115     '-fdump-rtl-bypass'
5116          Dump after jump bypassing and control flow optimizations.
5117
5118     '-fdump-rtl-combine'
5119          Dump after the RTL instruction combination pass.
5120
5121     '-fdump-rtl-compgotos'
5122          Dump after duplicating the computed gotos.
5123
5124     '-fdump-rtl-ce1'
5125     '-fdump-rtl-ce2'
5126     '-fdump-rtl-ce3'
5127          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
5128          enable dumping after the three if conversion passes.
5129
5130     '-fdump-rtl-cprop_hardreg'
5131          Dump after hard register copy propagation.
5132
5133     '-fdump-rtl-csa'
5134          Dump after combining stack adjustments.
5135
5136     '-fdump-rtl-cse1'
5137     '-fdump-rtl-cse2'
5138          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
5139          the two common subexpression elimination passes.
5140
5141     '-fdump-rtl-dce'
5142          Dump after the standalone dead code elimination passes.
5143
5144     '-fdump-rtl-dbr'
5145          Dump after delayed branch scheduling.
5146
5147     '-fdump-rtl-dce1'
5148     '-fdump-rtl-dce2'
5149          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
5150          the two dead store elimination passes.
5151
5152     '-fdump-rtl-eh'
5153          Dump after finalization of EH handling code.
5154
5155     '-fdump-rtl-eh_ranges'
5156          Dump after conversion of EH handling range regions.
5157
5158     '-fdump-rtl-expand'
5159          Dump after RTL generation.
5160
5161     '-fdump-rtl-fwprop1'
5162     '-fdump-rtl-fwprop2'
5163          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
5164          after the two forward propagation passes.
5165
5166     '-fdump-rtl-gcse1'
5167     '-fdump-rtl-gcse2'
5168          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
5169          global common subexpression elimination.
5170
5171     '-fdump-rtl-init-regs'
5172          Dump after the initialization of the registers.
5173
5174     '-fdump-rtl-initvals'
5175          Dump after the computation of the initial value sets.
5176
5177     '-fdump-rtl-into_cfglayout'
5178          Dump after converting to cfglayout mode.
5179
5180     '-fdump-rtl-ira'
5181          Dump after iterated register allocation.
5182
5183     '-fdump-rtl-jump'
5184          Dump after the second jump optimization.
5185
5186     '-fdump-rtl-loop2'
5187          '-fdump-rtl-loop2' enables dumping after the rtl loop
5188          optimization passes.
5189
5190     '-fdump-rtl-mach'
5191          Dump after performing the machine dependent reorganization
5192          pass, if that pass exists.
5193
5194     '-fdump-rtl-mode_sw'
5195          Dump after removing redundant mode switches.
5196
5197     '-fdump-rtl-rnreg'
5198          Dump after register renumbering.
5199
5200     '-fdump-rtl-outof_cfglayout'
5201          Dump after converting from cfglayout mode.
5202
5203     '-fdump-rtl-peephole2'
5204          Dump after the peephole pass.
5205
5206     '-fdump-rtl-postreload'
5207          Dump after post-reload optimizations.
5208
5209     '-fdump-rtl-pro_and_epilogue'
5210          Dump after generating the function prologues and epilogues.
5211
5212     '-fdump-rtl-regmove'
5213          Dump after the register move pass.
5214
5215     '-fdump-rtl-sched1'
5216     '-fdump-rtl-sched2'
5217          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
5218          after the basic block scheduling passes.
5219
5220     '-fdump-rtl-see'
5221          Dump after sign extension elimination.
5222
5223     '-fdump-rtl-seqabstr'
5224          Dump after common sequence discovery.
5225
5226     '-fdump-rtl-shorten'
5227          Dump after shortening branches.
5228
5229     '-fdump-rtl-sibling'
5230          Dump after sibling call optimizations.
5231
5232     '-fdump-rtl-split1'
5233     '-fdump-rtl-split2'
5234     '-fdump-rtl-split3'
5235     '-fdump-rtl-split4'
5236     '-fdump-rtl-split5'
5237          '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3',
5238          '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping
5239          after five rounds of instruction splitting.
5240
5241     '-fdump-rtl-sms'
5242          Dump after modulo scheduling.  This pass is only run on some
5243          architectures.
5244
5245     '-fdump-rtl-stack'
5246          Dump after conversion from GCC's "flat register file"
5247          registers to the x87's stack-like registers.  This pass is
5248          only run on x86 variants.
5249
5250     '-fdump-rtl-subreg1'
5251     '-fdump-rtl-subreg2'
5252          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
5253          after the two subreg expansion passes.
5254
5255     '-fdump-rtl-unshare'
5256          Dump after all rtl has been unshared.
5257
5258     '-fdump-rtl-vartrack'
5259          Dump after variable tracking.
5260
5261     '-fdump-rtl-vregs'
5262          Dump after converting virtual registers to hard registers.
5263
5264     '-fdump-rtl-web'
5265          Dump after live range splitting.
5266
5267     '-fdump-rtl-regclass'
5268     '-fdump-rtl-subregs_of_mode_init'
5269     '-fdump-rtl-subregs_of_mode_finish'
5270     '-fdump-rtl-dfinit'
5271     '-fdump-rtl-dfinish'
5272          These dumps are defined but always produce empty files.
5273
5274     '-da'
5275     '-fdump-rtl-all'
5276          Produce all the dumps listed above.
5277
5278     '-dA'
5279          Annotate the assembler output with miscellaneous debugging
5280          information.
5281
5282     '-dD'
5283          Dump all macro definitions, at the end of preprocessing, in
5284          addition to normal output.
5285
5286     '-dH'
5287          Produce a core dump whenever an error occurs.
5288
5289     '-dp'
5290          Annotate the assembler output with a comment indicating which
5291          pattern and alternative is used.  The length of each
5292          instruction is also printed.
5293
5294     '-dP'
5295          Dump the RTL in the assembler output as a comment before each
5296          instruction.  Also turns on '-dp' annotation.
5297
5298     '-dx'
5299          Just generate RTL for a function instead of compiling it.
5300          Usually used with '-fdump-rtl-expand'.
5301
5302'-fdump-noaddr'
5303     When doing debugging dumps, suppress address output.  This makes it
5304     more feasible to use diff on debugging dumps for compiler
5305     invocations with different compiler binaries and/or different text
5306     / bss / data / heap / stack / dso start locations.
5307
5308'-fdump-unnumbered'
5309     When doing debugging dumps, suppress instruction numbers and
5310     address output.  This makes it more feasible to use diff on
5311     debugging dumps for compiler invocations with different options, in
5312     particular with and without '-g'.
5313
5314'-fdump-unnumbered-links'
5315     When doing debugging dumps (see '-d' option above), suppress
5316     instruction numbers for the links to the previous and next
5317     instructions in a sequence.
5318
5319'-fdump-translation-unit (C++ only)'
5320'-fdump-translation-unit-OPTIONS (C++ only)'
5321     Dump a representation of the tree structure for the entire
5322     translation unit to a file.  The file name is made by appending
5323     '.tu' to the source file name, and the file is created in the same
5324     directory as the output file.  If the '-OPTIONS' form is used,
5325     OPTIONS controls the details of the dump as described for the
5326     '-fdump-tree' options.
5327
5328'-fdump-class-hierarchy (C++ only)'
5329'-fdump-class-hierarchy-OPTIONS (C++ only)'
5330     Dump a representation of each class's hierarchy and virtual
5331     function table layout to a file.  The file name is made by
5332     appending '.class' to the source file name, and the file is created
5333     in the same directory as the output file.  If the '-OPTIONS' form
5334     is used, OPTIONS controls the details of the dump as described for
5335     the '-fdump-tree' options.
5336
5337'-fdump-ipa-SWITCH'
5338     Control the dumping at various stages of inter-procedural analysis
5339     language tree to a file.  The file name is generated by appending a
5340     switch specific suffix to the source file name, and the file is
5341     created in the same directory as the output file.  The following
5342     dumps are possible:
5343
5344     'all'
5345          Enables all inter-procedural analysis dumps.
5346
5347     'cgraph'
5348          Dumps information about call-graph optimization, unused
5349          function removal, and inlining decisions.
5350
5351     'inline'
5352          Dump after function inlining.
5353
5354'-fdump-passes'
5355     Dump the list of optimization passes that are turned on and off by
5356     the current command-line options.
5357
5358'-fdump-statistics-OPTION'
5359     Enable and control dumping of pass statistics in a separate file.
5360     The file name is generated by appending a suffix ending in
5361     '.statistics' to the source file name, and the file is created in
5362     the same directory as the output file.  If the '-OPTION' form is
5363     used, '-stats' causes counters to be summed over the whole
5364     compilation unit while '-details' dumps every event as the passes
5365     generate them.  The default with no option is to sum counters for
5366     each function compiled.
5367
5368'-fdump-tree-SWITCH'
5369'-fdump-tree-SWITCH-OPTIONS'
5370'-fdump-tree-SWITCH-OPTIONS=FILENAME'
5371     Control the dumping at various stages of processing the
5372     intermediate language tree to a file.  The file name is generated
5373     by appending a switch-specific suffix to the source file name, and
5374     the file is created in the same directory as the output file.  In
5375     case of '=FILENAME' option, the dump is output on the given file
5376     instead of the auto named dump files.  If the '-OPTIONS' form is
5377     used, OPTIONS is a list of '-' separated options which control the
5378     details of the dump.  Not all options are applicable to all dumps;
5379     those that are not meaningful are ignored.  The following options
5380     are available
5381
5382     'address'
5383          Print the address of each node.  Usually this is not
5384          meaningful as it changes according to the environment and
5385          source file.  Its primary use is for tying up a dump file with
5386          a debug environment.
5387     'asmname'
5388          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
5389          that in the dump instead of 'DECL_NAME'.  Its primary use is
5390          ease of use working backward from mangled names in the
5391          assembly file.
5392     'slim'
5393          When dumping front-end intermediate representations, inhibit
5394          dumping of members of a scope or body of a function merely
5395          because that scope has been reached.  Only dump such items
5396          when they are directly reachable by some other path.
5397
5398          When dumping pretty-printed trees, this option inhibits
5399          dumping the bodies of control structures.
5400
5401          When dumping RTL, print the RTL in slim (condensed) form
5402          instead of the default LISP-like representation.
5403     'raw'
5404          Print a raw representation of the tree.  By default, trees are
5405          pretty-printed into a C-like representation.
5406     'details'
5407          Enable more detailed dumps (not honored by every dump option).
5408          Also include information from the optimization passes.
5409     'stats'
5410          Enable dumping various statistics about the pass (not honored
5411          by every dump option).
5412     'blocks'
5413          Enable showing basic block boundaries (disabled in raw dumps).
5414     'graph'
5415          For each of the other indicated dump files
5416          ('-fdump-rtl-PASS'), dump a representation of the control flow
5417          graph suitable for viewing with GraphViz to
5418          'FILE.PASSID.PASS.dot'.  Each function in the file is
5419          pretty-printed as a subgraph, so that GraphViz can render them
5420          all in a single plot.
5421
5422          This option currently only works for RTL dumps, and the RTL is
5423          always dumped in slim form.
5424     'vops'
5425          Enable showing virtual operands for every statement.
5426     'lineno'
5427          Enable showing line numbers for statements.
5428     'uid'
5429          Enable showing the unique ID ('DECL_UID') for each variable.
5430     'verbose'
5431          Enable showing the tree dump for each statement.
5432     'eh'
5433          Enable showing the EH region number holding each statement.
5434     'scev'
5435          Enable showing scalar evolution analysis details.
5436     'optimized'
5437          Enable showing optimization information (only available in
5438          certain passes).
5439     'missed'
5440          Enable showing missed optimization information (only available
5441          in certain passes).
5442     'notes'
5443          Enable other detailed optimization information (only available
5444          in certain passes).
5445     '=FILENAME'
5446          Instead of an auto named dump file, output into the given file
5447          name.  The file names 'stdout' and 'stderr' are treated
5448          specially and are considered already open standard streams.
5449          For example,
5450
5451               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
5452                    -fdump-tree-pre=stderr file.c
5453
5454          outputs vectorizer dump into 'foo.dump', while the PRE dump is
5455          output on to 'stderr'.  If two conflicting dump filenames are
5456          given for the same pass, then the latter option overrides the
5457          earlier one.
5458
5459     'all'
5460          Turn on all options, except 'raw', 'slim', 'verbose' and
5461          'lineno'.
5462
5463     'optall'
5464          Turn on all optimization options, i.e., 'optimized', 'missed',
5465          and 'note'.
5466
5467     The following tree dumps are possible:
5468
5469     'original'
5470          Dump before any tree based optimization, to 'FILE.original'.
5471
5472     'optimized'
5473          Dump after all tree based optimization, to 'FILE.optimized'.
5474
5475     'gimple'
5476          Dump each function before and after the gimplification pass to
5477          a file.  The file name is made by appending '.gimple' to the
5478          source file name.
5479
5480     'cfg'
5481          Dump the control flow graph of each function to a file.  The
5482          file name is made by appending '.cfg' to the source file name.
5483
5484     'ch'
5485          Dump each function after copying loop headers.  The file name
5486          is made by appending '.ch' to the source file name.
5487
5488     'ssa'
5489          Dump SSA related information to a file.  The file name is made
5490          by appending '.ssa' to the source file name.
5491
5492     'alias'
5493          Dump aliasing information for each function.  The file name is
5494          made by appending '.alias' to the source file name.
5495
5496     'ccp'
5497          Dump each function after CCP.  The file name is made by
5498          appending '.ccp' to the source file name.
5499
5500     'storeccp'
5501          Dump each function after STORE-CCP.  The file name is made by
5502          appending '.storeccp' to the source file name.
5503
5504     'pre'
5505          Dump trees after partial redundancy elimination.  The file
5506          name is made by appending '.pre' to the source file name.
5507
5508     'fre'
5509          Dump trees after full redundancy elimination.  The file name
5510          is made by appending '.fre' to the source file name.
5511
5512     'copyprop'
5513          Dump trees after copy propagation.  The file name is made by
5514          appending '.copyprop' to the source file name.
5515
5516     'store_copyprop'
5517          Dump trees after store copy-propagation.  The file name is
5518          made by appending '.store_copyprop' to the source file name.
5519
5520     'dce'
5521          Dump each function after dead code elimination.  The file name
5522          is made by appending '.dce' to the source file name.
5523
5524     'mudflap'
5525          Dump each function after adding mudflap instrumentation.  The
5526          file name is made by appending '.mudflap' to the source file
5527          name.
5528
5529     'sra'
5530          Dump each function after performing scalar replacement of
5531          aggregates.  The file name is made by appending '.sra' to the
5532          source file name.
5533
5534     'sink'
5535          Dump each function after performing code sinking.  The file
5536          name is made by appending '.sink' to the source file name.
5537
5538     'dom'
5539          Dump each function after applying dominator tree
5540          optimizations.  The file name is made by appending '.dom' to
5541          the source file name.
5542
5543     'dse'
5544          Dump each function after applying dead store elimination.  The
5545          file name is made by appending '.dse' to the source file name.
5546
5547     'phiopt'
5548          Dump each function after optimizing PHI nodes into
5549          straightline code.  The file name is made by appending
5550          '.phiopt' to the source file name.
5551
5552     'forwprop'
5553          Dump each function after forward propagating single use
5554          variables.  The file name is made by appending '.forwprop' to
5555          the source file name.
5556
5557     'copyrename'
5558          Dump each function after applying the copy rename
5559          optimization.  The file name is made by appending
5560          '.copyrename' to the source file name.
5561
5562     'nrv'
5563          Dump each function after applying the named return value
5564          optimization on generic trees.  The file name is made by
5565          appending '.nrv' to the source file name.
5566
5567     'vect'
5568          Dump each function after applying vectorization of loops.  The
5569          file name is made by appending '.vect' to the source file
5570          name.
5571
5572     'slp'
5573          Dump each function after applying vectorization of basic
5574          blocks.  The file name is made by appending '.slp' to the
5575          source file name.
5576
5577     'vrp'
5578          Dump each function after Value Range Propagation (VRP). The
5579          file name is made by appending '.vrp' to the source file name.
5580
5581     'all'
5582          Enable all the available tree dumps with the flags provided in
5583          this option.
5584
5585'-fopt-info'
5586'-fopt-info-OPTIONS'
5587'-fopt-info-OPTIONS=FILENAME'
5588     Controls optimization dumps from various optimization passes.  If
5589     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
5590     options to select the dump details and optimizations.  If OPTIONS
5591     is not specified, it defaults to 'all' for details and 'optall' for
5592     optimization groups.  If the FILENAME is not specified, it defaults
5593     to 'stderr'.  Note that the output FILENAME will be overwritten in
5594     case of multiple translation units.  If a combined output from
5595     multiple translation units is desired, 'stderr' should be used
5596     instead.
5597
5598     The options can be divided into two groups, 1) options describing
5599     the verbosity of the dump, and 2) options describing which
5600     optimizations should be included.  The options from both the groups
5601     can be freely mixed as they are non-overlapping.  However, in case
5602     of any conflicts, the latter options override the earlier options
5603     on the command line.  Though multiple -fopt-info options are
5604     accepted, only one of them can have '=filename'.  If other
5605     filenames are provided then all but the first one are ignored.
5606
5607     The dump verbosity has the following options
5608
5609     'optimized'
5610          Print information when an optimization is successfully
5611          applied.  It is up to a pass to decide which information is
5612          relevant.  For example, the vectorizer passes print the source
5613          location of loops which got successfully vectorized.
5614     'missed'
5615          Print information about missed optimizations.  Individual
5616          passes control which information to include in the output.
5617          For example,
5618
5619               gcc -O2 -ftree-vectorize -fopt-info-vec-missed
5620
5621          will print information about missed optimization opportunities
5622          from vectorization passes on stderr.
5623     'note'
5624          Print verbose information about optimizations, such as certain
5625          transformations, more detailed messages about decisions etc.
5626     'all'
5627          Print detailed optimization information.  This includes
5628          OPTIMIZED, MISSED, and NOTE.
5629
5630     The second set of options describes a group of optimizations and
5631     may include one or more of the following.
5632
5633     'ipa'
5634          Enable dumps from all interprocedural optimizations.
5635     'loop'
5636          Enable dumps from all loop optimizations.
5637     'inline'
5638          Enable dumps from all inlining optimizations.
5639     'vec'
5640          Enable dumps from all vectorization optimizations.
5641
5642     For example,
5643          gcc -O3 -fopt-info-missed=missed.all
5644
5645     outputs missed optimization report from all the passes into
5646     'missed.all'.
5647
5648     As another example,
5649          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
5650
5651     will output information about missed optimizations as well as
5652     optimized locations from all the inlining passes into 'inline.txt'.
5653
5654     If the FILENAME is provided, then the dumps from all the applicable
5655     optimizations are concatenated into the 'filename'.  Otherwise the
5656     dump is output onto 'stderr'.  If OPTIONS is omitted, it defaults
5657     to 'all-optall', which means dump all available optimization info
5658     from all the passes.  In the following example, all optimization
5659     info is output on to 'stderr'.
5660
5661          gcc -O3 -fopt-info
5662
5663     Note that '-fopt-info-vec-missed' behaves the same as
5664     '-fopt-info-missed-vec'.
5665
5666     As another example, consider
5667
5668          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
5669
5670     Here the two output filenames 'vec.miss' and 'loop.opt' are in
5671     conflict since only one output file is allowed.  In this case, only
5672     the first option takes effect and the subsequent options are
5673     ignored.  Thus only the 'vec.miss' is produced which cotaints dumps
5674     from the vectorizer about missed opportunities.
5675
5676'-ftree-vectorizer-verbose=N'
5677     This option is deprecated and is implemented in terms of
5678     '-fopt-info'.  Please use '-fopt-info-KIND' form instead, where
5679     KIND is one of the valid opt-info options.  It prints additional
5680     optimization information.  For N=0 no diagnostic information is
5681     reported.  If N=1 the vectorizer reports each loop that got
5682     vectorized, and the total number of loops that got vectorized.  If
5683     N=2 the vectorizer reports locations which could not be vectorized
5684     and the reasons for those.  For any higher verbosity levels all the
5685     analysis and transformation information from the vectorizer is
5686     reported.
5687
5688     Note that the information output by '-ftree-vectorizer-verbose'
5689     option is sent to 'stderr'.  If the equivalent form
5690     '-fopt-info-OPTIONS=FILENAME' is used then the output is sent into
5691     FILENAME instead.
5692
5693'-frandom-seed=STRING'
5694     This option provides a seed that GCC uses in place of random
5695     numbers in generating certain symbol names that have to be
5696     different in every compiled file.  It is also used to place unique
5697     stamps in coverage data files and the object files that produce
5698     them.  You can use the '-frandom-seed' option to produce
5699     reproducibly identical object files.
5700
5701     The STRING should be different for every file you compile.
5702
5703'-fsched-verbose=N'
5704     On targets that use instruction scheduling, this option controls
5705     the amount of debugging output the scheduler prints.  This
5706     information is written to standard error, unless
5707     '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which
5708     case it is output to the usual dump listing file, '.sched1' or
5709     '.sched2' respectively.  However for N greater than nine, the
5710     output is always printed to standard error.
5711
5712     For N greater than zero, '-fsched-verbose' outputs the same
5713     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
5714     greater than one, it also output basic block probabilities,
5715     detailed ready list information and unit/insn info.  For N greater
5716     than two, it includes RTL at abort point, control-flow and regions
5717     info.  And for N over four, '-fsched-verbose' also includes
5718     dependence info.
5719
5720'-save-temps'
5721'-save-temps=cwd'
5722     Store the usual "temporary" intermediate files permanently; place
5723     them in the current directory and name them based on the source
5724     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
5725     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
5726     preprocessed 'foo.i' output file even though the compiler now
5727     normally uses an integrated preprocessor.
5728
5729     When used in combination with the '-x' command-line option,
5730     '-save-temps' is sensible enough to avoid over writing an input
5731     source file with the same extension as an intermediate file.  The
5732     corresponding intermediate file may be obtained by renaming the
5733     source file before using '-save-temps'.
5734
5735     If you invoke GCC in parallel, compiling several different source
5736     files that share a common base name in different subdirectories or
5737     the same source file compiled for multiple output destinations, it
5738     is likely that the different parallel compilers will interfere with
5739     each other, and overwrite the temporary files.  For instance:
5740
5741          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5742          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5743
5744     may result in 'foo.i' and 'foo.o' being written to simultaneously
5745     by both compilers.
5746
5747'-save-temps=obj'
5748     Store the usual "temporary" intermediate files permanently.  If the
5749     '-o' option is used, the temporary files are based on the object
5750     file.  If the '-o' option is not used, the '-save-temps=obj' switch
5751     behaves like '-save-temps'.
5752
5753     For example:
5754
5755          gcc -save-temps=obj -c foo.c
5756          gcc -save-temps=obj -c bar.c -o dir/xbar.o
5757          gcc -save-temps=obj foobar.c -o dir2/yfoobar
5758
5759     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
5760     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
5761
5762'-time[=FILE]'
5763     Report the CPU time taken by each subprocess in the compilation
5764     sequence.  For C source files, this is the compiler proper and
5765     assembler (plus the linker if linking is done).
5766
5767     Without the specification of an output file, the output looks like
5768     this:
5769
5770          # cc1 0.12 0.01
5771          # as 0.00 0.01
5772
5773     The first number on each line is the "user time", that is time
5774     spent executing the program itself.  The second number is "system
5775     time", time spent executing operating system routines on behalf of
5776     the program.  Both numbers are in seconds.
5777
5778     With the specification of an output file, the output is appended to
5779     the named file, and it looks like this:
5780
5781          0.12 0.01 cc1 OPTIONS
5782          0.00 0.01 as OPTIONS
5783
5784     The "user time" and the "system time" are moved before the program
5785     name, and the options passed to the program are displayed, so that
5786     one can later tell what file was being compiled, and with which
5787     options.
5788
5789'-fvar-tracking'
5790     Run variable tracking pass.  It computes where variables are stored
5791     at each position in code.  Better debugging information is then
5792     generated (if the debugging information format supports this
5793     information).
5794
5795     It is enabled by default when compiling with optimization ('-Os',
5796     '-O', '-O2', ...), debugging information ('-g') and the debug info
5797     format supports it.
5798
5799'-fvar-tracking-assignments'
5800     Annotate assignments to user variables early in the compilation and
5801     attempt to carry the annotations over throughout the compilation
5802     all the way to the end, in an attempt to improve debug information
5803     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
5804
5805     It can be enabled even if var-tracking is disabled, in which case
5806     annotations are created and maintained, but discarded at the end.
5807
5808'-fvar-tracking-assignments-toggle'
5809     Toggle '-fvar-tracking-assignments', in the same way that
5810     '-gtoggle' toggles '-g'.
5811
5812'-print-file-name=LIBRARY'
5813     Print the full absolute name of the library file LIBRARY that would
5814     be used when linking--and don't do anything else.  With this
5815     option, GCC does not compile or link anything; it just prints the
5816     file name.
5817
5818'-print-multi-directory'
5819     Print the directory name corresponding to the multilib selected by
5820     any other switches present in the command line.  This directory is
5821     supposed to exist in 'GCC_EXEC_PREFIX'.
5822
5823'-print-multi-lib'
5824     Print the mapping from multilib directory names to compiler
5825     switches that enable them.  The directory name is separated from
5826     the switches by ';', and each switch starts with an '@' instead of
5827     the '-', without spaces between multiple switches.  This is
5828     supposed to ease shell processing.
5829
5830'-print-multi-os-directory'
5831     Print the path to OS libraries for the selected multilib, relative
5832     to some 'lib' subdirectory.  If OS libraries are present in the
5833     'lib' subdirectory and no multilibs are used, this is usually just
5834     '.', if OS libraries are present in 'libSUFFIX' sibling directories
5835     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
5836     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
5837     'amd64', 'sparcv9' or 'ev6'.
5838
5839'-print-multiarch'
5840     Print the path to OS libraries for the selected multiarch, relative
5841     to some 'lib' subdirectory.
5842
5843'-print-prog-name=PROGRAM'
5844     Like '-print-file-name', but searches for a program such as 'cpp'.
5845
5846'-print-libgcc-file-name'
5847     Same as '-print-file-name=libgcc.a'.
5848
5849     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
5850     do want to link with 'libgcc.a'.  You can do:
5851
5852          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
5853
5854'-print-search-dirs'
5855     Print the name of the configured installation directory and a list
5856     of program and library directories 'gcc' searches--and don't do
5857     anything else.
5858
5859     This is useful when 'gcc' prints the error message 'installation
5860     problem, cannot exec cpp0: No such file or directory'.  To resolve
5861     this you either need to put 'cpp0' and the other compiler
5862     components where 'gcc' expects to find them, or you can set the
5863     environment variable 'GCC_EXEC_PREFIX' to the directory where you
5864     installed them.  Don't forget the trailing '/'.  *Note Environment
5865     Variables::.
5866
5867'-print-sysroot'
5868     Print the target sysroot directory that is used during compilation.
5869     This is the target sysroot specified either at configure time or
5870     using the '--sysroot' option, possibly with an extra suffix that
5871     depends on compilation options.  If no target sysroot is specified,
5872     the option prints nothing.
5873
5874'-print-sysroot-headers-suffix'
5875     Print the suffix added to the target sysroot when searching for
5876     headers, or give an error if the compiler is not configured with
5877     such a suffix--and don't do anything else.
5878
5879'-dumpmachine'
5880     Print the compiler's target machine (for example,
5881     'i686-pc-linux-gnu')--and don't do anything else.
5882
5883'-dumpversion'
5884     Print the compiler version (for example, '3.0')--and don't do
5885     anything else.
5886
5887'-dumpspecs'
5888     Print the compiler's built-in specs--and don't do anything else.
5889     (This is used when GCC itself is being built.)  *Note Spec Files::.
5890
5891'-fno-eliminate-unused-debug-types'
5892     Normally, when producing DWARF 2 output, GCC avoids producing debug
5893     symbol output for types that are nowhere used in the source file
5894     being compiled.  Sometimes it is useful to have GCC emit debugging
5895     information for all types declared in a compilation unit,
5896     regardless of whether or not they are actually used in that
5897     compilation unit, for example if, in the debugger, you want to cast
5898     a value to a type that is not actually used in your program (but is
5899     declared).  More often, however, this results in a significant
5900     amount of wasted space.
5901
5902
5903File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
5904
59053.10 Options That Control Optimization
5906======================================
5907
5908These options control various sorts of optimizations.
5909
5910 Without any optimization option, the compiler's goal is to reduce the
5911cost of compilation and to make debugging produce the expected results.
5912Statements are independent: if you stop the program with a breakpoint
5913between statements, you can then assign a new value to any variable or
5914change the program counter to any other statement in the function and
5915get exactly the results you expect from the source code.
5916
5917 Turning on optimization flags makes the compiler attempt to improve the
5918performance and/or code size at the expense of compilation time and
5919possibly the ability to debug the program.
5920
5921 The compiler performs optimization based on the knowledge it has of the
5922program.  Compiling multiple files at once to a single output file mode
5923allows the compiler to use information gained from all of the files when
5924compiling each of them.
5925
5926 Not all optimizations are controlled directly by a flag.  Only
5927optimizations that have a flag are listed in this section.
5928
5929 Most optimizations are only enabled if an '-O' level is set on the
5930command line.  Otherwise they are disabled, even if individual
5931optimization flags are specified.
5932
5933 Depending on the target and how GCC was configured, a slightly
5934different set of optimizations may be enabled at each '-O' level than
5935those listed here.  You can invoke GCC with '-Q --help=optimizers' to
5936find out the exact set of optimizations that are enabled at each level.
5937*Note Overall Options::, for examples.
5938
5939'-O'
5940'-O1'
5941     Optimize.  Optimizing compilation takes somewhat more time, and a
5942     lot more memory for a large function.
5943
5944     With '-O', the compiler tries to reduce code size and execution
5945     time, without performing any optimizations that take a great deal
5946     of compilation time.
5947
5948     '-O' turns on the following optimization flags:
5949          -fauto-inc-dec
5950          -fcompare-elim
5951          -fcprop-registers
5952          -fdce
5953          -fdefer-pop
5954          -fdelayed-branch
5955          -fdse
5956          -fguess-branch-probability
5957          -fif-conversion2
5958          -fif-conversion
5959          -fipa-pure-const
5960          -fipa-profile
5961          -fipa-reference
5962          -fmerge-constants
5963          -fsplit-wide-types
5964          -ftree-bit-ccp
5965          -ftree-builtin-call-dce
5966          -ftree-ccp
5967          -ftree-ch
5968          -ftree-copyrename
5969          -ftree-dce
5970          -ftree-dominator-opts
5971          -ftree-dse
5972          -ftree-forwprop
5973          -ftree-fre
5974          -ftree-phiprop
5975          -ftree-slsr
5976          -ftree-sra
5977          -ftree-pta
5978          -ftree-ter
5979          -funit-at-a-time
5980
5981     '-O' also turns on '-fomit-frame-pointer' on machines where doing
5982     so does not interfere with debugging.
5983
5984'-O2'
5985     Optimize even more.  GCC performs nearly all supported
5986     optimizations that do not involve a space-speed tradeoff.  As
5987     compared to '-O', this option increases both compilation time and
5988     the performance of the generated code.
5989
5990     '-O2' turns on all optimization flags specified by '-O'.  It also
5991     turns on the following optimization flags:
5992          -fthread-jumps
5993          -falign-functions  -falign-jumps
5994          -falign-loops  -falign-labels
5995          -fcaller-saves
5996          -fcrossjumping
5997          -fcse-follow-jumps  -fcse-skip-blocks
5998          -fdelete-null-pointer-checks
5999          -fdevirtualize
6000          -fexpensive-optimizations
6001          -fgcse  -fgcse-lm
6002          -fhoist-adjacent-loads
6003          -finline-small-functions
6004          -findirect-inlining
6005          -fipa-sra
6006          -foptimize-sibling-calls
6007          -fpartial-inlining
6008          -fpeephole2
6009          -fregmove
6010          -freorder-blocks  -freorder-functions
6011          -frerun-cse-after-loop
6012          -fsched-interblock  -fsched-spec
6013          -fschedule-insns  -fschedule-insns2
6014          -fstrict-aliasing -fstrict-overflow
6015          -ftree-switch-conversion -ftree-tail-merge
6016          -ftree-pre
6017          -ftree-vrp
6018
6019     Please note the warning under '-fgcse' about invoking '-O2' on
6020     programs that use computed gotos.
6021
6022'-O3'
6023     Optimize yet more.  '-O3' turns on all optimizations specified by
6024     '-O2' and also turns on the '-finline-functions',
6025     '-funswitch-loops', '-fpredictive-commoning',
6026     '-fgcse-after-reload', '-ftree-vectorize', '-fvect-cost-model',
6027     '-ftree-partial-pre' and '-fipa-cp-clone' options.
6028
6029'-O0'
6030     Reduce compilation time and make debugging produce the expected
6031     results.  This is the default.
6032
6033'-Os'
6034     Optimize for size.  '-Os' enables all '-O2' optimizations that do
6035     not typically increase code size.  It also performs further
6036     optimizations designed to reduce code size.
6037
6038     '-Os' disables the following optimization flags:
6039          -falign-functions  -falign-jumps  -falign-loops
6040          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6041          -fprefetch-loop-arrays  -ftree-vect-loop-version
6042
6043'-Ofast'
6044     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
6045     optimizations.  It also enables optimizations that are not valid
6046     for all standard-compliant programs.  It turns on '-ffast-math' and
6047     the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'.
6048
6049'-Og'
6050     Optimize debugging experience.  '-Og' enables optimizations that do
6051     not interfere with debugging.  It should be the optimization level
6052     of choice for the standard edit-compile-debug cycle, offering a
6053     reasonable level of optimization while maintaining fast compilation
6054     and a good debugging experience.
6055
6056     If you use multiple '-O' options, with or without level numbers,
6057     the last such option is the one that is effective.
6058
6059 Options of the form '-fFLAG' specify machine-independent flags.  Most
6060flags have both positive and negative forms; the negative form of
6061'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
6062listed--the one you typically use.  You can figure out the other form by
6063either removing 'no-' or adding it.
6064
6065 The following options control specific optimizations.  They are either
6066activated by '-O' options or are related to ones that are.  You can use
6067the following flags in the rare cases when "fine-tuning" of
6068optimizations to be performed is desired.
6069
6070'-fno-default-inline'
6071     Do not make member functions inline by default merely because they
6072     are defined inside the class scope (C++ only).  Otherwise, when you
6073     specify '-O', member functions defined inside class scope are
6074     compiled inline by default; i.e., you don't need to add 'inline' in
6075     front of the member function name.
6076
6077'-fno-defer-pop'
6078     Always pop the arguments to each function call as soon as that
6079     function returns.  For machines that must pop arguments after a
6080     function call, the compiler normally lets arguments accumulate on
6081     the stack for several function calls and pops them all at once.
6082
6083     Disabled at levels '-O', '-O2', '-O3', '-Os'.
6084
6085'-fforward-propagate'
6086     Perform a forward propagation pass on RTL.  The pass tries to
6087     combine two instructions and checks if the result can be
6088     simplified.  If loop unrolling is active, two passes are performed
6089     and the second is scheduled after loop unrolling.
6090
6091     This option is enabled by default at optimization levels '-O',
6092     '-O2', '-O3', '-Os'.
6093
6094'-ffp-contract=STYLE'
6095     '-ffp-contract=off' disables floating-point expression contraction.
6096     '-ffp-contract=fast' enables floating-point expression contraction
6097     such as forming of fused multiply-add operations if the target has
6098     native support for them.  '-ffp-contract=on' enables floating-point
6099     expression contraction if allowed by the language standard.  This
6100     is currently not implemented and treated equal to
6101     '-ffp-contract=off'.
6102
6103     The default is '-ffp-contract=fast'.
6104
6105'-fomit-frame-pointer'
6106     Don't keep the frame pointer in a register for functions that don't
6107     need one.  This avoids the instructions to save, set up and restore
6108     frame pointers; it also makes an extra register available in many
6109     functions.  *It also makes debugging impossible on some machines.*
6110
6111     On some machines, such as the VAX, this flag has no effect, because
6112     the standard calling sequence automatically handles the frame
6113     pointer and nothing is saved by pretending it doesn't exist.  The
6114     machine-description macro 'FRAME_POINTER_REQUIRED' controls whether
6115     a target machine supports this flag.  *Note Register Usage:
6116     (gccint)Registers.
6117
6118     Starting with GCC version 4.6, the default setting (when not
6119     optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86
6120     targets has been changed to '-fomit-frame-pointer'.  The default
6121     can be reverted to '-fno-omit-frame-pointer' by configuring GCC
6122     with the '--enable-frame-pointer' configure option.
6123
6124     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6125
6126'-foptimize-sibling-calls'
6127     Optimize sibling and tail recursive calls.
6128
6129     Enabled at levels '-O2', '-O3', '-Os'.
6130
6131'-fno-inline'
6132     Do not expand any functions inline apart from those marked with the
6133     'always_inline' attribute.  This is the default when not
6134     optimizing.
6135
6136     Single functions can be exempted from inlining by marking them with
6137     the 'noinline' attribute.
6138
6139'-finline-small-functions'
6140     Integrate functions into their callers when their body is smaller
6141     than expected function call code (so overall size of program gets
6142     smaller).  The compiler heuristically decides which functions are
6143     simple enough to be worth integrating in this way.  This inlining
6144     applies to all functions, even those not declared inline.
6145
6146     Enabled at level '-O2'.
6147
6148'-findirect-inlining'
6149     Inline also indirect calls that are discovered to be known at
6150     compile time thanks to previous inlining.  This option has any
6151     effect only when inlining itself is turned on by the
6152     '-finline-functions' or '-finline-small-functions' options.
6153
6154     Enabled at level '-O2'.
6155
6156'-finline-functions'
6157     Consider all functions for inlining, even if they are not declared
6158     inline.  The compiler heuristically decides which functions are
6159     worth integrating in this way.
6160
6161     If all calls to a given function are integrated, and the function
6162     is declared 'static', then the function is normally not output as
6163     assembler code in its own right.
6164
6165     Enabled at level '-O3'.
6166
6167'-finline-functions-called-once'
6168     Consider all 'static' functions called once for inlining into their
6169     caller even if they are not marked 'inline'.  If a call to a given
6170     function is integrated, then the function is not output as
6171     assembler code in its own right.
6172
6173     Enabled at levels '-O1', '-O2', '-O3' and '-Os'.
6174
6175'-fearly-inlining'
6176     Inline functions marked by 'always_inline' and functions whose body
6177     seems smaller than the function call overhead early before doing
6178     '-fprofile-generate' instrumentation and real inlining pass.  Doing
6179     so makes profiling significantly cheaper and usually inlining
6180     faster on programs having large chains of nested wrapper functions.
6181
6182     Enabled by default.
6183
6184'-fipa-sra'
6185     Perform interprocedural scalar replacement of aggregates, removal
6186     of unused parameters and replacement of parameters passed by
6187     reference by parameters passed by value.
6188
6189     Enabled at levels '-O2', '-O3' and '-Os'.
6190
6191'-finline-limit=N'
6192     By default, GCC limits the size of functions that can be inlined.
6193     This flag allows coarse control of this limit.  N is the size of
6194     functions that can be inlined in number of pseudo instructions.
6195
6196     Inlining is actually controlled by a number of parameters, which
6197     may be specified individually by using '--param NAME=VALUE'.  The
6198     '-finline-limit=N' option sets some of these parameters as follows:
6199
6200     'max-inline-insns-single'
6201          is set to N/2.
6202     'max-inline-insns-auto'
6203          is set to N/2.
6204
6205     See below for a documentation of the individual parameters
6206     controlling inlining and for the defaults of these parameters.
6207
6208     _Note:_ there may be no value to '-finline-limit' that results in
6209     default behavior.
6210
6211     _Note:_ pseudo instruction represents, in this particular context,
6212     an abstract measurement of function's size.  In no way does it
6213     represent a count of assembly instructions and as such its exact
6214     meaning might change from one release to an another.
6215
6216'-fno-keep-inline-dllexport'
6217     This is a more fine-grained version of '-fkeep-inline-functions',
6218     which applies only to functions that are declared using the
6219     'dllexport' attribute or declspec (*Note Declaring Attributes of
6220     Functions: Function Attributes.)
6221
6222'-fkeep-inline-functions'
6223     In C, emit 'static' functions that are declared 'inline' into the
6224     object file, even if the function has been inlined into all of its
6225     callers.  This switch does not affect functions using the 'extern
6226     inline' extension in GNU C90.  In C++, emit any and all inline
6227     functions into the object file.
6228
6229'-fkeep-static-consts'
6230     Emit variables declared 'static const' when optimization isn't
6231     turned on, even if the variables aren't referenced.
6232
6233     GCC enables this option by default.  If you want to force the
6234     compiler to check if a variable is referenced, regardless of
6235     whether or not optimization is turned on, use the
6236     '-fno-keep-static-consts' option.
6237
6238'-fmerge-constants'
6239     Attempt to merge identical constants (string constants and
6240     floating-point constants) across compilation units.
6241
6242     This option is the default for optimized compilation if the
6243     assembler and linker support it.  Use '-fno-merge-constants' to
6244     inhibit this behavior.
6245
6246     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6247
6248'-fmerge-all-constants'
6249     Attempt to merge identical constants and identical variables.
6250
6251     This option implies '-fmerge-constants'.  In addition to
6252     '-fmerge-constants' this considers e.g. even constant initialized
6253     arrays or initialized constant variables with integral or
6254     floating-point types.  Languages like C or C++ require each
6255     variable, including multiple instances of the same variable in
6256     recursive calls, to have distinct locations, so using this option
6257     results in non-conforming behavior.
6258
6259'-fmodulo-sched'
6260     Perform swing modulo scheduling immediately before the first
6261     scheduling pass.  This pass looks at innermost loops and reorders
6262     their instructions by overlapping different iterations.
6263
6264'-fmodulo-sched-allow-regmoves'
6265     Perform more aggressive SMS-based modulo scheduling with register
6266     moves allowed.  By setting this flag certain anti-dependences edges
6267     are deleted, which triggers the generation of reg-moves based on
6268     the life-range analysis.  This option is effective only with
6269     '-fmodulo-sched' enabled.
6270
6271'-fno-branch-count-reg'
6272     Do not use "decrement and branch" instructions on a count register,
6273     but instead generate a sequence of instructions that decrement a
6274     register, compare it against zero, then branch based upon the
6275     result.  This option is only meaningful on architectures that
6276     support such instructions, which include x86, PowerPC, IA-64 and
6277     S/390.
6278
6279     The default is '-fbranch-count-reg'.
6280
6281'-fno-function-cse'
6282     Do not put function addresses in registers; make each instruction
6283     that calls a constant function contain the function's address
6284     explicitly.
6285
6286     This option results in less efficient code, but some strange hacks
6287     that alter the assembler output may be confused by the
6288     optimizations performed when this option is not used.
6289
6290     The default is '-ffunction-cse'
6291
6292'-fno-zero-initialized-in-bss'
6293     If the target supports a BSS section, GCC by default puts variables
6294     that are initialized to zero into BSS.  This can save space in the
6295     resulting code.
6296
6297     This option turns off this behavior because some programs
6298     explicitly rely on variables going to the data section--e.g., so
6299     that the resulting executable can find the beginning of that
6300     section and/or make assumptions based on that.
6301
6302     The default is '-fzero-initialized-in-bss'.
6303
6304'-fmudflap -fmudflapth -fmudflapir'
6305     For front-ends that support it (C and C++), instrument all risky
6306     pointer/array dereferencing operations, some standard library
6307     string/heap functions, and some other associated constructs with
6308     range/validity tests.  Modules so instrumented should be immune to
6309     buffer overflows, invalid heap use, and some other classes of C/C++
6310     programming errors.  The instrumentation relies on a separate
6311     runtime library ('libmudflap'), which is linked into a program if
6312     '-fmudflap' is given at link time.  Run-time behavior of the
6313     instrumented program is controlled by the 'MUDFLAP_OPTIONS'
6314     environment variable.  See 'env MUDFLAP_OPTIONS=-help a.out' for
6315     its options.
6316
6317     Use '-fmudflapth' instead of '-fmudflap' to compile and to link if
6318     your program is multi-threaded.  Use '-fmudflapir', in addition to
6319     '-fmudflap' or '-fmudflapth', if instrumentation should ignore
6320     pointer reads.  This produces less instrumentation (and therefore
6321     faster execution) and still provides some protection against
6322     outright memory corrupting writes, but allows erroneously read data
6323     to propagate within a program.
6324
6325'-fthread-jumps'
6326     Perform optimizations that check to see if a jump branches to a
6327     location where another comparison subsumed by the first is found.
6328     If so, the first branch is redirected to either the destination of
6329     the second branch or a point immediately following it, depending on
6330     whether the condition is known to be true or false.
6331
6332     Enabled at levels '-O2', '-O3', '-Os'.
6333
6334'-fsplit-wide-types'
6335     When using a type that occupies multiple registers, such as 'long
6336     long' on a 32-bit system, split the registers apart and allocate
6337     them independently.  This normally generates better code for those
6338     types, but may make debugging more difficult.
6339
6340     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6341
6342'-fcse-follow-jumps'
6343     In common subexpression elimination (CSE), scan through jump
6344     instructions when the target of the jump is not reached by any
6345     other path.  For example, when CSE encounters an 'if' statement
6346     with an 'else' clause, CSE follows the jump when the condition
6347     tested is false.
6348
6349     Enabled at levels '-O2', '-O3', '-Os'.
6350
6351'-fcse-skip-blocks'
6352     This is similar to '-fcse-follow-jumps', but causes CSE to follow
6353     jumps that conditionally skip over blocks.  When CSE encounters a
6354     simple 'if' statement with no else clause, '-fcse-skip-blocks'
6355     causes CSE to follow the jump around the body of the 'if'.
6356
6357     Enabled at levels '-O2', '-O3', '-Os'.
6358
6359'-frerun-cse-after-loop'
6360     Re-run common subexpression elimination after loop optimizations
6361     are performed.
6362
6363     Enabled at levels '-O2', '-O3', '-Os'.
6364
6365'-fgcse'
6366     Perform a global common subexpression elimination pass.  This pass
6367     also performs global constant and copy propagation.
6368
6369     _Note:_ When compiling a program using computed gotos, a GCC
6370     extension, you may get better run-time performance if you disable
6371     the global common subexpression elimination pass by adding
6372     '-fno-gcse' to the command line.
6373
6374     Enabled at levels '-O2', '-O3', '-Os'.
6375
6376'-fgcse-lm'
6377     When '-fgcse-lm' is enabled, global common subexpression
6378     elimination attempts to move loads that are only killed by stores
6379     into themselves.  This allows a loop containing a load/store
6380     sequence to be changed to a load outside the loop, and a copy/store
6381     within the loop.
6382
6383     Enabled by default when '-fgcse' is enabled.
6384
6385'-fgcse-sm'
6386     When '-fgcse-sm' is enabled, a store motion pass is run after
6387     global common subexpression elimination.  This pass attempts to
6388     move stores out of loops.  When used in conjunction with
6389     '-fgcse-lm', loops containing a load/store sequence can be changed
6390     to a load before the loop and a store after the loop.
6391
6392     Not enabled at any optimization level.
6393
6394'-fgcse-las'
6395     When '-fgcse-las' is enabled, the global common subexpression
6396     elimination pass eliminates redundant loads that come after stores
6397     to the same memory location (both partial and full redundancies).
6398
6399     Not enabled at any optimization level.
6400
6401'-fgcse-after-reload'
6402     When '-fgcse-after-reload' is enabled, a redundant load elimination
6403     pass is performed after reload.  The purpose of this pass is to
6404     clean up redundant spilling.
6405
6406'-faggressive-loop-optimizations'
6407     This option tells the loop optimizer to use language constraints to
6408     derive bounds for the number of iterations of a loop.  This assumes
6409     that loop code does not invoke undefined behavior by for example
6410     causing signed integer overflows or out-of-bound array accesses.
6411     The bounds for the number of iterations of a loop are used to guide
6412     loop unrolling and peeling and loop exit test optimizations.  This
6413     option is enabled by default.
6414
6415'-funsafe-loop-optimizations'
6416     This option tells the loop optimizer to assume that loop indices do
6417     not overflow, and that loops with nontrivial exit condition are not
6418     infinite.  This enables a wider range of loop optimizations even if
6419     the loop optimizer itself cannot prove that these assumptions are
6420     valid.  If you use '-Wunsafe-loop-optimizations', the compiler
6421     warns you if it finds this kind of loop.
6422
6423'-fcrossjumping'
6424     Perform cross-jumping transformation.  This transformation unifies
6425     equivalent code and saves code size.  The resulting code may or may
6426     not perform better than without cross-jumping.
6427
6428     Enabled at levels '-O2', '-O3', '-Os'.
6429
6430'-fauto-inc-dec'
6431     Combine increments or decrements of addresses with memory accesses.
6432     This pass is always skipped on architectures that do not have
6433     instructions to support this.  Enabled by default at '-O' and
6434     higher on architectures that support this.
6435
6436'-fdce'
6437     Perform dead code elimination (DCE) on RTL.  Enabled by default at
6438     '-O' and higher.
6439
6440'-fdse'
6441     Perform dead store elimination (DSE) on RTL.  Enabled by default at
6442     '-O' and higher.
6443
6444'-fif-conversion'
6445     Attempt to transform conditional jumps into branch-less
6446     equivalents.  This includes use of conditional moves, min, max, set
6447     flags and abs instructions, and some tricks doable by standard
6448     arithmetics.  The use of conditional execution on chips where it is
6449     available is controlled by 'if-conversion2'.
6450
6451     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6452
6453'-fif-conversion2'
6454     Use conditional execution (where available) to transform
6455     conditional jumps into branch-less equivalents.
6456
6457     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6458
6459'-fdelete-null-pointer-checks'
6460     Assume that programs cannot safely dereference null pointers, and
6461     that no code or data element resides there.  This enables simple
6462     constant folding optimizations at all optimization levels.  In
6463     addition, other optimization passes in GCC use this flag to control
6464     global dataflow analyses that eliminate useless checks for null
6465     pointers; these assume that if a pointer is checked after it has
6466     already been dereferenced, it cannot be null.
6467
6468     Note however that in some environments this assumption is not true.
6469     Use '-fno-delete-null-pointer-checks' to disable this optimization
6470     for programs that depend on that behavior.
6471
6472     Some targets, especially embedded ones, disable this option at all
6473     levels.  Otherwise it is enabled at all levels: '-O0', '-O1',
6474     '-O2', '-O3', '-Os'.  Passes that use the information are enabled
6475     independently at different optimization levels.
6476
6477'-fdevirtualize'
6478     Attempt to convert calls to virtual functions to direct calls.
6479     This is done both within a procedure and interprocedurally as part
6480     of indirect inlining ('-findirect-inlining') and interprocedural
6481     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
6482     '-Os'.
6483
6484'-fexpensive-optimizations'
6485     Perform a number of minor optimizations that are relatively
6486     expensive.
6487
6488     Enabled at levels '-O2', '-O3', '-Os'.
6489
6490'-free'
6491     Attempt to remove redundant extension instructions.  This is
6492     especially helpful for the x86-64 architecture, which implicitly
6493     zero-extends in 64-bit registers after writing to their lower
6494     32-bit half.
6495
6496     Enabled for x86 at levels '-O2', '-O3'.
6497
6498'-foptimize-register-move'
6499'-fregmove'
6500     Attempt to reassign register numbers in move instructions and as
6501     operands of other simple instructions in order to maximize the
6502     amount of register tying.  This is especially helpful on machines
6503     with two-operand instructions.
6504
6505     Note '-fregmove' and '-foptimize-register-move' are the same
6506     optimization.
6507
6508     Enabled at levels '-O2', '-O3', '-Os'.
6509
6510'-fira-algorithm=ALGORITHM'
6511     Use the specified coloring algorithm for the integrated register
6512     allocator.  The ALGORITHM argument can be 'priority', which
6513     specifies Chow's priority coloring, or 'CB', which specifies
6514     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
6515     implemented for all architectures, but for those targets that do
6516     support it, it is the default because it generates better code.
6517
6518'-fira-region=REGION'
6519     Use specified regions for the integrated register allocator.  The
6520     REGION argument should be one of the following:
6521
6522     'all'
6523          Use all loops as register allocation regions.  This can give
6524          the best results for machines with a small and/or irregular
6525          register set.
6526
6527     'mixed'
6528          Use all loops except for loops with small register pressure as
6529          the regions.  This value usually gives the best results in
6530          most cases and for most architectures, and is enabled by
6531          default when compiling with optimization for speed ('-O',
6532          '-O2', ...).
6533
6534     'one'
6535          Use all functions as a single region.  This typically results
6536          in the smallest code size, and is enabled by default for '-Os'
6537          or '-O0'.
6538
6539'-fira-hoist-pressure'
6540     Use IRA to evaluate register pressure in the code hoisting pass for
6541     decisions to hoist expressions.  This option usually results in
6542     smaller code, but it can slow the compiler down.
6543
6544     This option is enabled at level '-Os' for all targets.
6545
6546'-fira-loop-pressure'
6547     Use IRA to evaluate register pressure in loops for decisions to
6548     move loop invariants.  This option usually results in generation of
6549     faster and smaller code on machines with large register files (>=
6550     32 registers), but it can slow the compiler down.
6551
6552     This option is enabled at level '-O3' for some targets.
6553
6554'-fno-ira-share-save-slots'
6555     Disable sharing of stack slots used for saving call-used hard
6556     registers living through a call.  Each hard register gets a
6557     separate stack slot, and as a result function stack frames are
6558     larger.
6559
6560'-fno-ira-share-spill-slots'
6561     Disable sharing of stack slots allocated for pseudo-registers.
6562     Each pseudo-register that does not get a hard register gets a
6563     separate stack slot, and as a result function stack frames are
6564     larger.
6565
6566'-fira-verbose=N'
6567     Control the verbosity of the dump file for the integrated register
6568     allocator.  The default value is 5.  If the value N is greater or
6569     equal to 10, the dump output is sent to stderr using the same
6570     format as N minus 10.
6571
6572'-fdelayed-branch'
6573     If supported for the target machine, attempt to reorder
6574     instructions to exploit instruction slots available after delayed
6575     branch instructions.
6576
6577     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6578
6579'-fschedule-insns'
6580     If supported for the target machine, attempt to reorder
6581     instructions to eliminate execution stalls due to required data
6582     being unavailable.  This helps machines that have slow floating
6583     point or memory load instructions by allowing other instructions to
6584     be issued until the result of the load or floating-point
6585     instruction is required.
6586
6587     Enabled at levels '-O2', '-O3'.
6588
6589'-fschedule-insns2'
6590     Similar to '-fschedule-insns', but requests an additional pass of
6591     instruction scheduling after register allocation has been done.
6592     This is especially useful on machines with a relatively small
6593     number of registers and where memory load instructions take more
6594     than one cycle.
6595
6596     Enabled at levels '-O2', '-O3', '-Os'.
6597
6598'-fno-sched-interblock'
6599     Don't schedule instructions across basic blocks.  This is normally
6600     enabled by default when scheduling before register allocation, i.e.
6601     with '-fschedule-insns' or at '-O2' or higher.
6602
6603'-fno-sched-spec'
6604     Don't allow speculative motion of non-load instructions.  This is
6605     normally enabled by default when scheduling before register
6606     allocation, i.e. with '-fschedule-insns' or at '-O2' or higher.
6607
6608'-fsched-pressure'
6609     Enable register pressure sensitive insn scheduling before register
6610     allocation.  This only makes sense when scheduling before register
6611     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
6612     higher.  Usage of this option can improve the generated code and
6613     decrease its size by preventing register pressure increase above
6614     the number of available hard registers and subsequent spills in
6615     register allocation.
6616
6617'-fsched-spec-load'
6618     Allow speculative motion of some load instructions.  This only
6619     makes sense when scheduling before register allocation, i.e. with
6620     '-fschedule-insns' or at '-O2' or higher.
6621
6622'-fsched-spec-load-dangerous'
6623     Allow speculative motion of more load instructions.  This only
6624     makes sense when scheduling before register allocation, i.e. with
6625     '-fschedule-insns' or at '-O2' or higher.
6626
6627'-fsched-stalled-insns'
6628'-fsched-stalled-insns=N'
6629     Define how many insns (if any) can be moved prematurely from the
6630     queue of stalled insns into the ready list during the second
6631     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
6632     are moved prematurely, '-fsched-stalled-insns=0' means there is no
6633     limit on how many queued insns can be moved prematurely.
6634     '-fsched-stalled-insns' without a value is equivalent to
6635     '-fsched-stalled-insns=1'.
6636
6637'-fsched-stalled-insns-dep'
6638'-fsched-stalled-insns-dep=N'
6639     Define how many insn groups (cycles) are examined for a dependency
6640     on a stalled insn that is a candidate for premature removal from
6641     the queue of stalled insns.  This has an effect only during the
6642     second scheduling pass, and only if '-fsched-stalled-insns' is
6643     used.  '-fno-sched-stalled-insns-dep' is equivalent to
6644     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
6645     a value is equivalent to '-fsched-stalled-insns-dep=1'.
6646
6647'-fsched2-use-superblocks'
6648     When scheduling after register allocation, use superblock
6649     scheduling.  This allows motion across basic block boundaries,
6650     resulting in faster schedules.  This option is experimental, as not
6651     all machine descriptions used by GCC model the CPU closely enough
6652     to avoid unreliable results from the algorithm.
6653
6654     This only makes sense when scheduling after register allocation,
6655     i.e. with '-fschedule-insns2' or at '-O2' or higher.
6656
6657'-fsched-group-heuristic'
6658     Enable the group heuristic in the scheduler.  This heuristic favors
6659     the instruction that belongs to a schedule group.  This is enabled
6660     by default when scheduling is enabled, i.e. with '-fschedule-insns'
6661     or '-fschedule-insns2' or at '-O2' or higher.
6662
6663'-fsched-critical-path-heuristic'
6664     Enable the critical-path heuristic in the scheduler.  This
6665     heuristic favors instructions on the critical path.  This is
6666     enabled by default when scheduling is enabled, i.e. with
6667     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
6668
6669'-fsched-spec-insn-heuristic'
6670     Enable the speculative instruction heuristic in the scheduler.
6671     This heuristic favors speculative instructions with greater
6672     dependency weakness.  This is enabled by default when scheduling is
6673     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
6674     '-O2' or higher.
6675
6676'-fsched-rank-heuristic'
6677     Enable the rank heuristic in the scheduler.  This heuristic favors
6678     the instruction belonging to a basic block with greater size or
6679     frequency.  This is enabled by default when scheduling is enabled,
6680     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
6681     higher.
6682
6683'-fsched-last-insn-heuristic'
6684     Enable the last-instruction heuristic in the scheduler.  This
6685     heuristic favors the instruction that is less dependent on the last
6686     instruction scheduled.  This is enabled by default when scheduling
6687     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
6688     at '-O2' or higher.
6689
6690'-fsched-dep-count-heuristic'
6691     Enable the dependent-count heuristic in the scheduler.  This
6692     heuristic favors the instruction that has more instructions
6693     depending on it.  This is enabled by default when scheduling is
6694     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
6695     '-O2' or higher.
6696
6697'-freschedule-modulo-scheduled-loops'
6698     Modulo scheduling is performed before traditional scheduling.  If a
6699     loop is modulo scheduled, later scheduling passes may change its
6700     schedule.  Use this option to control that behavior.
6701
6702'-fselective-scheduling'
6703     Schedule instructions using selective scheduling algorithm.
6704     Selective scheduling runs instead of the first scheduler pass.
6705
6706'-fselective-scheduling2'
6707     Schedule instructions using selective scheduling algorithm.
6708     Selective scheduling runs instead of the second scheduler pass.
6709
6710'-fsel-sched-pipelining'
6711     Enable software pipelining of innermost loops during selective
6712     scheduling.  This option has no effect unless one of
6713     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
6714
6715'-fsel-sched-pipelining-outer-loops'
6716     When pipelining loops during selective scheduling, also pipeline
6717     outer loops.  This option has no effect unless
6718     '-fsel-sched-pipelining' is turned on.
6719
6720'-fshrink-wrap'
6721     Emit function prologues only before parts of the function that need
6722     it, rather than at the top of the function.  This flag is enabled
6723     by default at '-O' and higher.
6724
6725'-fcaller-saves'
6726     Enable allocation of values to registers that are clobbered by
6727     function calls, by emitting extra instructions to save and restore
6728     the registers around such calls.  Such allocation is done only when
6729     it seems to result in better code.
6730
6731     This option is always enabled by default on certain machines,
6732     usually those which have no call-preserved registers to use
6733     instead.
6734
6735     Enabled at levels '-O2', '-O3', '-Os'.
6736
6737'-fcombine-stack-adjustments'
6738     Tracks stack adjustments (pushes and pops) and stack memory
6739     references and then tries to find ways to combine them.
6740
6741     Enabled by default at '-O1' and higher.
6742
6743'-fconserve-stack'
6744     Attempt to minimize stack usage.  The compiler attempts to use less
6745     stack space, even if that makes the program slower.  This option
6746     implies setting the 'large-stack-frame' parameter to 100 and the
6747     'large-stack-frame-growth' parameter to 400.
6748
6749'-ftree-reassoc'
6750     Perform reassociation on trees.  This flag is enabled by default at
6751     '-O' and higher.
6752
6753'-ftree-pre'
6754     Perform partial redundancy elimination (PRE) on trees.  This flag
6755     is enabled by default at '-O2' and '-O3'.
6756
6757'-ftree-partial-pre'
6758     Make partial redundancy elimination (PRE) more aggressive.  This
6759     flag is enabled by default at '-O3'.
6760
6761'-ftree-forwprop'
6762     Perform forward propagation on trees.  This flag is enabled by
6763     default at '-O' and higher.
6764
6765'-ftree-fre'
6766     Perform full redundancy elimination (FRE) on trees.  The difference
6767     between FRE and PRE is that FRE only considers expressions that are
6768     computed on all paths leading to the redundant computation.  This
6769     analysis is faster than PRE, though it exposes fewer redundancies.
6770     This flag is enabled by default at '-O' and higher.
6771
6772'-ftree-phiprop'
6773     Perform hoisting of loads from conditional pointers on trees.  This
6774     pass is enabled by default at '-O' and higher.
6775
6776'-fhoist-adjacent-loads'
6777     Speculatively hoist loads from both branches of an if-then-else if
6778     the loads are from adjacent locations in the same structure and the
6779     target architecture has a conditional move instruction.  This flag
6780     is enabled by default at '-O2' and higher.
6781
6782'-ftree-copy-prop'
6783     Perform copy propagation on trees.  This pass eliminates
6784     unnecessary copy operations.  This flag is enabled by default at
6785     '-O' and higher.
6786
6787'-fipa-pure-const'
6788     Discover which functions are pure or constant.  Enabled by default
6789     at '-O' and higher.
6790
6791'-fipa-reference'
6792     Discover which static variables do not escape the compilation unit.
6793     Enabled by default at '-O' and higher.
6794
6795'-fipa-pta'
6796     Perform interprocedural pointer analysis and interprocedural
6797     modification and reference analysis.  This option can cause
6798     excessive memory and compile-time usage on large compilation units.
6799     It is not enabled by default at any optimization level.
6800
6801'-fipa-profile'
6802     Perform interprocedural profile propagation.  The functions called
6803     only from cold functions are marked as cold.  Also functions
6804     executed once (such as 'cold', 'noreturn', static constructors or
6805     destructors) are identified.  Cold functions and loop less parts of
6806     functions executed once are then optimized for size.  Enabled by
6807     default at '-O' and higher.
6808
6809'-fipa-cp'
6810     Perform interprocedural constant propagation.  This optimization
6811     analyzes the program to determine when values passed to functions
6812     are constants and then optimizes accordingly.  This optimization
6813     can substantially increase performance if the application has
6814     constants passed to functions.  This flag is enabled by default at
6815     '-O2', '-Os' and '-O3'.
6816
6817'-fipa-cp-clone'
6818     Perform function cloning to make interprocedural constant
6819     propagation stronger.  When enabled, interprocedural constant
6820     propagation performs function cloning when externally visible
6821     function can be called with constant arguments.  Because this
6822     optimization can create multiple copies of functions, it may
6823     significantly increase code size (see '--param
6824     ipcp-unit-growth=VALUE').  This flag is enabled by default at
6825     '-O3'.
6826
6827'-ftree-sink'
6828     Perform forward store motion on trees.  This flag is enabled by
6829     default at '-O' and higher.
6830
6831'-ftree-bit-ccp'
6832     Perform sparse conditional bit constant propagation on trees and
6833     propagate pointer alignment information.  This pass only operates
6834     on local scalar variables and is enabled by default at '-O' and
6835     higher.  It requires that '-ftree-ccp' is enabled.
6836
6837'-ftree-ccp'
6838     Perform sparse conditional constant propagation (CCP) on trees.
6839     This pass only operates on local scalar variables and is enabled by
6840     default at '-O' and higher.
6841
6842'-ftree-switch-conversion'
6843     Perform conversion of simple initializations in a switch to
6844     initializations from a scalar array.  This flag is enabled by
6845     default at '-O2' and higher.
6846
6847'-ftree-tail-merge'
6848     Look for identical code sequences.  When found, replace one with a
6849     jump to the other.  This optimization is known as tail merging or
6850     cross jumping.  This flag is enabled by default at '-O2' and
6851     higher.  The compilation time in this pass can be limited using
6852     'max-tail-merge-comparisons' parameter and
6853     'max-tail-merge-iterations' parameter.
6854
6855'-ftree-dce'
6856     Perform dead code elimination (DCE) on trees.  This flag is enabled
6857     by default at '-O' and higher.
6858
6859'-ftree-builtin-call-dce'
6860     Perform conditional dead code elimination (DCE) for calls to
6861     built-in functions that may set 'errno' but are otherwise
6862     side-effect free.  This flag is enabled by default at '-O2' and
6863     higher if '-Os' is not also specified.
6864
6865'-ftree-dominator-opts'
6866     Perform a variety of simple scalar cleanups (constant/copy
6867     propagation, redundancy elimination, range propagation and
6868     expression simplification) based on a dominator tree traversal.
6869     This also performs jump threading (to reduce jumps to jumps).  This
6870     flag is enabled by default at '-O' and higher.
6871
6872'-ftree-dse'
6873     Perform dead store elimination (DSE) on trees.  A dead store is a
6874     store into a memory location that is later overwritten by another
6875     store without any intervening loads.  In this case the earlier
6876     store can be deleted.  This flag is enabled by default at '-O' and
6877     higher.
6878
6879'-ftree-ch'
6880     Perform loop header copying on trees.  This is beneficial since it
6881     increases effectiveness of code motion optimizations.  It also
6882     saves one jump.  This flag is enabled by default at '-O' and
6883     higher.  It is not enabled for '-Os', since it usually increases
6884     code size.
6885
6886'-ftree-loop-optimize'
6887     Perform loop optimizations on trees.  This flag is enabled by
6888     default at '-O' and higher.
6889
6890'-ftree-loop-linear'
6891     Perform loop interchange transformations on tree.  Same as
6892     '-floop-interchange'.  To use this code transformation, GCC has to
6893     be configured with '--with-ppl' and '--with-cloog' to enable the
6894     Graphite loop transformation infrastructure.
6895
6896'-floop-interchange'
6897     Perform loop interchange transformations on loops.  Interchanging
6898     two nested loops switches the inner and outer loops.  For example,
6899     given a loop like:
6900          DO J = 1, M
6901            DO I = 1, N
6902              A(J, I) = A(J, I) * C
6903            ENDDO
6904          ENDDO
6905     loop interchange transforms the loop as if it were written:
6906          DO I = 1, N
6907            DO J = 1, M
6908              A(J, I) = A(J, I) * C
6909            ENDDO
6910          ENDDO
6911     which can be beneficial when 'N' is larger than the caches, because
6912     in Fortran, the elements of an array are stored in memory
6913     contiguously by column, and the original loop iterates over rows,
6914     potentially creating at each access a cache miss.  This
6915     optimization applies to all the languages supported by GCC and is
6916     not limited to Fortran.  To use this code transformation, GCC has
6917     to be configured with '--with-ppl' and '--with-cloog' to enable the
6918     Graphite loop transformation infrastructure.
6919
6920'-floop-strip-mine'
6921     Perform loop strip mining transformations on loops.  Strip mining
6922     splits a loop into two nested loops.  The outer loop has strides
6923     equal to the strip size and the inner loop has strides of the
6924     original loop within a strip.  The strip length can be changed
6925     using the 'loop-block-tile-size' parameter.  For example, given a
6926     loop like:
6927          DO I = 1, N
6928            A(I) = A(I) + C
6929          ENDDO
6930     loop strip mining transforms the loop as if it were written:
6931          DO II = 1, N, 51
6932            DO I = II, min (II + 50, N)
6933              A(I) = A(I) + C
6934            ENDDO
6935          ENDDO
6936     This optimization applies to all the languages supported by GCC and
6937     is not limited to Fortran.  To use this code transformation, GCC
6938     has to be configured with '--with-ppl' and '--with-cloog' to enable
6939     the Graphite loop transformation infrastructure.
6940
6941'-floop-block'
6942     Perform loop blocking transformations on loops.  Blocking strip
6943     mines each loop in the loop nest such that the memory accesses of
6944     the element loops fit inside caches.  The strip length can be
6945     changed using the 'loop-block-tile-size' parameter.  For example,
6946     given a loop like:
6947          DO I = 1, N
6948            DO J = 1, M
6949              A(J, I) = B(I) + C(J)
6950            ENDDO
6951          ENDDO
6952     loop blocking transforms the loop as if it were written:
6953          DO II = 1, N, 51
6954            DO JJ = 1, M, 51
6955              DO I = II, min (II + 50, N)
6956                DO J = JJ, min (JJ + 50, M)
6957                  A(J, I) = B(I) + C(J)
6958                ENDDO
6959              ENDDO
6960            ENDDO
6961          ENDDO
6962     which can be beneficial when 'M' is larger than the caches, because
6963     the innermost loop iterates over a smaller amount of data which can
6964     be kept in the caches.  This optimization applies to all the
6965     languages supported by GCC and is not limited to Fortran.  To use
6966     this code transformation, GCC has to be configured with
6967     '--with-ppl' and '--with-cloog' to enable the Graphite loop
6968     transformation infrastructure.
6969
6970'-fgraphite-identity'
6971     Enable the identity transformation for graphite.  For every SCoP we
6972     generate the polyhedral representation and transform it back to
6973     gimple.  Using '-fgraphite-identity' we can check the costs or
6974     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
6975     minimal optimizations are also performed by the code generator
6976     CLooG, like index splitting and dead code elimination in loops.
6977
6978'-floop-nest-optimize'
6979     Enable the ISL based loop nest optimizer.  This is a generic loop
6980     nest optimizer based on the Pluto optimization algorithms.  It
6981     calculates a loop structure optimized for data-locality and
6982     parallelism.  This option is experimental.
6983
6984'-floop-parallelize-all'
6985     Use the Graphite data dependence analysis to identify loops that
6986     can be parallelized.  Parallelize all the loops that can be
6987     analyzed to not contain loop carried dependences without checking
6988     that it is profitable to parallelize the loops.
6989
6990'-fcheck-data-deps'
6991     Compare the results of several data dependence analyzers.  This
6992     option is used for debugging the data dependence analyzers.
6993
6994'-ftree-loop-if-convert'
6995     Attempt to transform conditional jumps in the innermost loops to
6996     branch-less equivalents.  The intent is to remove control-flow from
6997     the innermost loops in order to improve the ability of the
6998     vectorization pass to handle these loops.  This is enabled by
6999     default if vectorization is enabled.
7000
7001'-ftree-loop-if-convert-stores'
7002     Attempt to also if-convert conditional jumps containing memory
7003     writes.  This transformation can be unsafe for multi-threaded
7004     programs as it transforms conditional memory writes into
7005     unconditional memory writes.  For example,
7006          for (i = 0; i < N; i++)
7007            if (cond)
7008              A[i] = expr;
7009     is transformed to
7010          for (i = 0; i < N; i++)
7011            A[i] = cond ? expr : A[i];
7012     potentially producing data races.
7013
7014'-ftree-loop-distribution'
7015     Perform loop distribution.  This flag can improve cache performance
7016     on big loop bodies and allow further loop optimizations, like
7017     parallelization or vectorization, to take place.  For example, the
7018     loop
7019          DO I = 1, N
7020            A(I) = B(I) + C
7021            D(I) = E(I) * F
7022          ENDDO
7023     is transformed to
7024          DO I = 1, N
7025             A(I) = B(I) + C
7026          ENDDO
7027          DO I = 1, N
7028             D(I) = E(I) * F
7029          ENDDO
7030
7031'-ftree-loop-distribute-patterns'
7032     Perform loop distribution of patterns that can be code generated
7033     with calls to a library.  This flag is enabled by default at '-O3'.
7034
7035     This pass distributes the initialization loops and generates a call
7036     to memset zero.  For example, the loop
7037          DO I = 1, N
7038            A(I) = 0
7039            B(I) = A(I) + I
7040          ENDDO
7041     is transformed to
7042          DO I = 1, N
7043             A(I) = 0
7044          ENDDO
7045          DO I = 1, N
7046             B(I) = A(I) + I
7047          ENDDO
7048     and the initialization loop is transformed into a call to memset
7049     zero.
7050
7051'-ftree-loop-im'
7052     Perform loop invariant motion on trees.  This pass moves only
7053     invariants that are hard to handle at RTL level (function calls,
7054     operations that expand to nontrivial sequences of insns).  With
7055     '-funswitch-loops' it also moves operands of conditions that are
7056     invariant out of the loop, so that we can use just trivial
7057     invariantness analysis in loop unswitching.  The pass also includes
7058     store motion.
7059
7060'-ftree-loop-ivcanon'
7061     Create a canonical counter for number of iterations in loops for
7062     which determining number of iterations requires complicated
7063     analysis.  Later optimizations then may determine the number
7064     easily.  Useful especially in connection with unrolling.
7065
7066'-fivopts'
7067     Perform induction variable optimizations (strength reduction,
7068     induction variable merging and induction variable elimination) on
7069     trees.
7070
7071'-ftree-parallelize-loops=n'
7072     Parallelize loops, i.e., split their iteration space to run in n
7073     threads.  This is only possible for loops whose iterations are
7074     independent and can be arbitrarily reordered.  The optimization is
7075     only profitable on multiprocessor machines, for loops that are
7076     CPU-intensive, rather than constrained e.g. by memory bandwidth.
7077     This option implies '-pthread', and thus is only supported on
7078     targets that have support for '-pthread'.
7079
7080'-ftree-pta'
7081     Perform function-local points-to analysis on trees.  This flag is
7082     enabled by default at '-O' and higher.
7083
7084'-ftree-sra'
7085     Perform scalar replacement of aggregates.  This pass replaces
7086     structure references with scalars to prevent committing structures
7087     to memory too early.  This flag is enabled by default at '-O' and
7088     higher.
7089
7090'-ftree-copyrename'
7091     Perform copy renaming on trees.  This pass attempts to rename
7092     compiler temporaries to other variables at copy locations, usually
7093     resulting in variable names which more closely resemble the
7094     original variables.  This flag is enabled by default at '-O' and
7095     higher.
7096
7097'-ftree-coalesce-inlined-vars'
7098     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
7099     combine small user-defined variables too, but only if they were
7100     inlined from other functions.  It is a more limited form of
7101     '-ftree-coalesce-vars'.  This may harm debug information of such
7102     inlined variables, but it will keep variables of the inlined-into
7103     function apart from each other, such that they are more likely to
7104     contain the expected values in a debugging session.  This was the
7105     default in GCC versions older than 4.7.
7106
7107'-ftree-coalesce-vars'
7108     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
7109     combine small user-defined variables too, instead of just compiler
7110     temporaries.  This may severely limit the ability to debug an
7111     optimized program compiled with '-fno-var-tracking-assignments'.
7112     In the negated form, this flag prevents SSA coalescing of user
7113     variables, including inlined ones.  This option is enabled by
7114     default.
7115
7116'-ftree-ter'
7117     Perform temporary expression replacement during the SSA->normal
7118     phase.  Single use/single def temporaries are replaced at their use
7119     location with their defining expression.  This results in
7120     non-GIMPLE code, but gives the expanders much more complex trees to
7121     work on resulting in better RTL generation.  This is enabled by
7122     default at '-O' and higher.
7123
7124'-ftree-slsr'
7125     Perform straight-line strength reduction on trees.  This recognizes
7126     related expressions involving multiplications and replaces them by
7127     less expensive calculations when possible.  This is enabled by
7128     default at '-O' and higher.
7129
7130'-ftree-vectorize'
7131     Perform loop vectorization on trees.  This flag is enabled by
7132     default at '-O3'.
7133
7134'-ftree-slp-vectorize'
7135     Perform basic block vectorization on trees.  This flag is enabled
7136     by default at '-O3' and when '-ftree-vectorize' is enabled.
7137
7138'-ftree-vect-loop-version'
7139     Perform loop versioning when doing loop vectorization on trees.
7140     When a loop appears to be vectorizable except that data alignment
7141     or data dependence cannot be determined at compile time, then
7142     vectorized and non-vectorized versions of the loop are generated
7143     along with run-time checks for alignment or dependence to control
7144     which version is executed.  This option is enabled by default
7145     except at level '-Os' where it is disabled.
7146
7147'-fvect-cost-model'
7148     Enable cost model for vectorization.  This option is enabled by
7149     default at '-O3'.
7150
7151'-ftree-vrp'
7152     Perform Value Range Propagation on trees.  This is similar to the
7153     constant propagation pass, but instead of values, ranges of values
7154     are propagated.  This allows the optimizers to remove unnecessary
7155     range checks like array bound checks and null pointer checks.  This
7156     is enabled by default at '-O2' and higher.  Null pointer check
7157     elimination is only done if '-fdelete-null-pointer-checks' is
7158     enabled.
7159
7160'-ftracer'
7161     Perform tail duplication to enlarge superblock size.  This
7162     transformation simplifies the control flow of the function allowing
7163     other optimizations to do a better job.
7164
7165'-funroll-loops'
7166     Unroll loops whose number of iterations can be determined at
7167     compile time or upon entry to the loop.  '-funroll-loops' implies
7168     '-frerun-cse-after-loop'.  This option makes code larger, and may
7169     or may not make it run faster.
7170
7171'-funroll-all-loops'
7172     Unroll all loops, even if their number of iterations is uncertain
7173     when the loop is entered.  This usually makes programs run more
7174     slowly.  '-funroll-all-loops' implies the same options as
7175     '-funroll-loops',
7176
7177'-fsplit-ivs-in-unroller'
7178     Enables expression of values of induction variables in later
7179     iterations of the unrolled loop using the value in the first
7180     iteration.  This breaks long dependency chains, thus improving
7181     efficiency of the scheduling passes.
7182
7183     A combination of '-fweb' and CSE is often sufficient to obtain the
7184     same effect.  However, that is not reliable in cases where the loop
7185     body is more complicated than a single basic block.  It also does
7186     not work at all on some architectures due to restrictions in the
7187     CSE pass.
7188
7189     This optimization is enabled by default.
7190
7191'-fvariable-expansion-in-unroller'
7192     With this option, the compiler creates multiple copies of some
7193     local variables when unrolling a loop, which can result in superior
7194     code.
7195
7196'-fpartial-inlining'
7197     Inline parts of functions.  This option has any effect only when
7198     inlining itself is turned on by the '-finline-functions' or
7199     '-finline-small-functions' options.
7200
7201     Enabled at level '-O2'.
7202
7203'-fpredictive-commoning'
7204     Perform predictive commoning optimization, i.e., reusing
7205     computations (especially memory loads and stores) performed in
7206     previous iterations of loops.
7207
7208     This option is enabled at level '-O3'.
7209
7210'-fprefetch-loop-arrays'
7211     If supported by the target machine, generate instructions to
7212     prefetch memory to improve the performance of loops that access
7213     large arrays.
7214
7215     This option may generate better or worse code; results are highly
7216     dependent on the structure of loops within the source code.
7217
7218     Disabled at level '-Os'.
7219
7220'-fno-peephole'
7221'-fno-peephole2'
7222     Disable any machine-specific peephole optimizations.  The
7223     difference between '-fno-peephole' and '-fno-peephole2' is in how
7224     they are implemented in the compiler; some targets use one, some
7225     use the other, a few use both.
7226
7227     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
7228     levels '-O2', '-O3', '-Os'.
7229
7230'-fno-guess-branch-probability'
7231     Do not guess branch probabilities using heuristics.
7232
7233     GCC uses heuristics to guess branch probabilities if they are not
7234     provided by profiling feedback ('-fprofile-arcs').  These
7235     heuristics are based on the control flow graph.  If some branch
7236     probabilities are specified by '__builtin_expect', then the
7237     heuristics are used to guess branch probabilities for the rest of
7238     the control flow graph, taking the '__builtin_expect' info into
7239     account.  The interactions between the heuristics and
7240     '__builtin_expect' can be complex, and in some cases, it may be
7241     useful to disable the heuristics so that the effects of
7242     '__builtin_expect' are easier to understand.
7243
7244     The default is '-fguess-branch-probability' at levels '-O', '-O2',
7245     '-O3', '-Os'.
7246
7247'-freorder-blocks'
7248     Reorder basic blocks in the compiled function in order to reduce
7249     number of taken branches and improve code locality.
7250
7251     Enabled at levels '-O2', '-O3'.
7252
7253'-freorder-blocks-and-partition'
7254     In addition to reordering basic blocks in the compiled function, in
7255     order to reduce number of taken branches, partitions hot and cold
7256     basic blocks into separate sections of the assembly and .o files,
7257     to improve paging and cache locality performance.
7258
7259     This optimization is automatically turned off in the presence of
7260     exception handling, for linkonce sections, for functions with a
7261     user-defined section attribute and on any architecture that does
7262     not support named sections.
7263
7264'-freorder-functions'
7265     Reorder functions in the object file in order to improve code
7266     locality.  This is implemented by using special subsections
7267     '.text.hot' for most frequently executed functions and
7268     '.text.unlikely' for unlikely executed functions.  Reordering is
7269     done by the linker so object file format must support named
7270     sections and linker must place them in a reasonable way.
7271
7272     Also profile feedback must be available to make this option
7273     effective.  See '-fprofile-arcs' for details.
7274
7275     Enabled at levels '-O2', '-O3', '-Os'.
7276
7277'-fstrict-aliasing'
7278     Allow the compiler to assume the strictest aliasing rules
7279     applicable to the language being compiled.  For C (and C++), this
7280     activates optimizations based on the type of expressions.  In
7281     particular, an object of one type is assumed never to reside at the
7282     same address as an object of a different type, unless the types are
7283     almost the same.  For example, an 'unsigned int' can alias an
7284     'int', but not a 'void*' or a 'double'.  A character type may alias
7285     any other type.
7286
7287     Pay special attention to code like this:
7288          union a_union {
7289            int i;
7290            double d;
7291          };
7292
7293          int f() {
7294            union a_union t;
7295            t.d = 3.0;
7296            return t.i;
7297          }
7298     The practice of reading from a different union member than the one
7299     most recently written to (called "type-punning") is common.  Even
7300     with '-fstrict-aliasing', type-punning is allowed, provided the
7301     memory is accessed through the union type.  So, the code above
7302     works as expected.  *Note Structures unions enumerations and
7303     bit-fields implementation::.  However, this code might not:
7304          int f() {
7305            union a_union t;
7306            int* ip;
7307            t.d = 3.0;
7308            ip = &t.i;
7309            return *ip;
7310          }
7311
7312     Similarly, access by taking the address, casting the resulting
7313     pointer and dereferencing the result has undefined behavior, even
7314     if the cast uses a union type, e.g.:
7315          int f() {
7316            double d = 3.0;
7317            return ((union a_union *) &d)->i;
7318          }
7319
7320     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
7321     '-Os'.
7322
7323'-fstrict-overflow'
7324     Allow the compiler to assume strict signed overflow rules,
7325     depending on the language being compiled.  For C (and C++) this
7326     means that overflow when doing arithmetic with signed numbers is
7327     undefined, which means that the compiler may assume that it does
7328     not happen.  This permits various optimizations.  For example, the
7329     compiler assumes that an expression like 'i + 10 > i' is always
7330     true for signed 'i'.  This assumption is only valid if signed
7331     overflow is undefined, as the expression is false if 'i + 10'
7332     overflows when using twos complement arithmetic.  When this option
7333     is in effect any attempt to determine whether an operation on
7334     signed numbers overflows must be written carefully to not actually
7335     involve overflow.
7336
7337     This option also allows the compiler to assume strict pointer
7338     semantics: given a pointer to an object, if adding an offset to
7339     that pointer does not produce a pointer to the same object, the
7340     addition is undefined.  This permits the compiler to conclude that
7341     'p + u > p' is always true for a pointer 'p' and unsigned integer
7342     'u'.  This assumption is only valid because pointer wraparound is
7343     undefined, as the expression is false if 'p + u' overflows using
7344     twos complement arithmetic.
7345
7346     See also the '-fwrapv' option.  Using '-fwrapv' means that integer
7347     signed overflow is fully defined: it wraps.  When '-fwrapv' is
7348     used, there is no difference between '-fstrict-overflow' and
7349     '-fno-strict-overflow' for integers.  With '-fwrapv' certain types
7350     of overflow are permitted.  For example, if the compiler gets an
7351     overflow when doing arithmetic on constants, the overflowed value
7352     can still be used with '-fwrapv', but not otherwise.
7353
7354     The '-fstrict-overflow' option is enabled at levels '-O2', '-O3',
7355     '-Os'.
7356
7357'-falign-functions'
7358'-falign-functions=N'
7359     Align the start of functions to the next power-of-two greater than
7360     N, skipping up to N bytes.  For instance, '-falign-functions=32'
7361     aligns functions to the next 32-byte boundary, but
7362     '-falign-functions=24' aligns to the next 32-byte boundary only if
7363     this can be done by skipping 23 bytes or less.
7364
7365     '-fno-align-functions' and '-falign-functions=1' are equivalent and
7366     mean that functions are not aligned.
7367
7368     Some assemblers only support this flag when N is a power of two; in
7369     that case, it is rounded up.
7370
7371     If N is not specified or is zero, use a machine-dependent default.
7372
7373     Enabled at levels '-O2', '-O3'.
7374
7375'-falign-labels'
7376'-falign-labels=N'
7377     Align all branch targets to a power-of-two boundary, skipping up to
7378     N bytes like '-falign-functions'.  This option can easily make code
7379     slower, because it must insert dummy operations for when the branch
7380     target is reached in the usual flow of the code.
7381
7382     '-fno-align-labels' and '-falign-labels=1' are equivalent and mean
7383     that labels are not aligned.
7384
7385     If '-falign-loops' or '-falign-jumps' are applicable and are
7386     greater than this value, then their values are used instead.
7387
7388     If N is not specified or is zero, use a machine-dependent default
7389     which is very likely to be '1', meaning no alignment.
7390
7391     Enabled at levels '-O2', '-O3'.
7392
7393'-falign-loops'
7394'-falign-loops=N'
7395     Align loops to a power-of-two boundary, skipping up to N bytes like
7396     '-falign-functions'.  If the loops are executed many times, this
7397     makes up for any execution of the dummy operations.
7398
7399     '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
7400     that loops are not aligned.
7401
7402     If N is not specified or is zero, use a machine-dependent default.
7403
7404     Enabled at levels '-O2', '-O3'.
7405
7406'-falign-jumps'
7407'-falign-jumps=N'
7408     Align branch targets to a power-of-two boundary, for branch targets
7409     where the targets can only be reached by jumping, skipping up to N
7410     bytes like '-falign-functions'.  In this case, no dummy operations
7411     need be executed.
7412
7413     '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean
7414     that loops are not aligned.
7415
7416     If N is not specified or is zero, use a machine-dependent default.
7417
7418     Enabled at levels '-O2', '-O3'.
7419
7420'-funit-at-a-time'
7421     This option is left for compatibility reasons.  '-funit-at-a-time'
7422     has no effect, while '-fno-unit-at-a-time' implies
7423     '-fno-toplevel-reorder' and '-fno-section-anchors'.
7424
7425     Enabled by default.
7426
7427'-fno-toplevel-reorder'
7428     Do not reorder top-level functions, variables, and 'asm'
7429     statements.  Output them in the same order that they appear in the
7430     input file.  When this option is used, unreferenced static
7431     variables are not removed.  This option is intended to support
7432     existing code that relies on a particular ordering.  For new code,
7433     it is better to use attributes.
7434
7435     Enabled at level '-O0'.  When disabled explicitly, it also implies
7436     '-fno-section-anchors', which is otherwise enabled at '-O0' on some
7437     targets.
7438
7439'-fweb'
7440     Constructs webs as commonly used for register allocation purposes
7441     and assign each web individual pseudo register.  This allows the
7442     register allocation pass to operate on pseudos directly, but also
7443     strengthens several other optimization passes, such as CSE, loop
7444     optimizer and trivial dead code remover.  It can, however, make
7445     debugging impossible, since variables no longer stay in a "home
7446     register".
7447
7448     Enabled by default with '-funroll-loops'.
7449
7450'-fwhole-program'
7451     Assume that the current compilation unit represents the whole
7452     program being compiled.  All public functions and variables with
7453     the exception of 'main' and those merged by attribute
7454     'externally_visible' become static functions and in effect are
7455     optimized more aggressively by interprocedural optimizers.
7456
7457     This option should not be used in combination with '-flto'.
7458     Instead relying on a linker plugin should provide safer and more
7459     precise information.
7460
7461'-flto[=N]'
7462     This option runs the standard link-time optimizer.  When invoked
7463     with source code, it generates GIMPLE (one of GCC's internal
7464     representations) and writes it to special ELF sections in the
7465     object file.  When the object files are linked together, all the
7466     function bodies are read from these ELF sections and instantiated
7467     as if they had been part of the same translation unit.
7468
7469     To use the link-time optimizer, '-flto' needs to be specified at
7470     compile time and during the final link.  For example:
7471
7472          gcc -c -O2 -flto foo.c
7473          gcc -c -O2 -flto bar.c
7474          gcc -o myprog -flto -O2 foo.o bar.o
7475
7476     The first two invocations to GCC save a bytecode representation of
7477     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
7478     final invocation reads the GIMPLE bytecode from 'foo.o' and
7479     'bar.o', merges the two files into a single internal image, and
7480     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
7481     merged into a single image, this causes all the interprocedural
7482     analyses and optimizations in GCC to work across the two files as
7483     if they were a single one.  This means, for example, that the
7484     inliner is able to inline functions in 'bar.o' into functions in
7485     'foo.o' and vice-versa.
7486
7487     Another (simpler) way to enable link-time optimization is:
7488
7489          gcc -o myprog -flto -O2 foo.c bar.c
7490
7491     The above generates bytecode for 'foo.c' and 'bar.c', merges them
7492     together into a single GIMPLE representation and optimizes them as
7493     usual to produce 'myprog'.
7494
7495     The only important thing to keep in mind is that to enable
7496     link-time optimizations the '-flto' flag needs to be passed to both
7497     the compile and the link commands.
7498
7499     To make whole program optimization effective, it is necessary to
7500     make certain whole program assumptions.  The compiler needs to know
7501     what functions and variables can be accessed by libraries and
7502     runtime outside of the link-time optimized unit.  When supported by
7503     the linker, the linker plugin (see '-fuse-linker-plugin') passes
7504     information to the compiler about used and externally visible
7505     symbols.  When the linker plugin is not available,
7506     '-fwhole-program' should be used to allow the compiler to make
7507     these assumptions, which leads to more aggressive optimization
7508     decisions.
7509
7510     Note that when a file is compiled with '-flto', the generated
7511     object file is larger than a regular object file because it
7512     contains GIMPLE bytecodes and the usual final code.  This means
7513     that object files with LTO information can be linked as normal
7514     object files; if '-flto' is not passed to the linker, no
7515     interprocedural optimizations are applied.
7516
7517     Additionally, the optimization flags used to compile individual
7518     files are not necessarily related to those used at link time.  For
7519     instance,
7520
7521          gcc -c -O0 -flto foo.c
7522          gcc -c -O0 -flto bar.c
7523          gcc -o myprog -flto -O3 foo.o bar.o
7524
7525     This produces individual object files with unoptimized assembler
7526     code, but the resulting binary 'myprog' is optimized at '-O3'.  If,
7527     instead, the final binary is generated without '-flto', then
7528     'myprog' is not optimized.
7529
7530     When producing the final binary with '-flto', GCC only applies
7531     link-time optimizations to those files that contain bytecode.
7532     Therefore, you can mix and match object files and libraries with
7533     GIMPLE bytecodes and final object code.  GCC automatically selects
7534     which files to optimize in LTO mode and which files to link without
7535     further processing.
7536
7537     There are some code generation flags preserved by GCC when
7538     generating bytecodes, as they need to be used during the final link
7539     stage.  Currently, the following options are saved into the GIMPLE
7540     bytecode files: '-fPIC', '-fcommon' and all the '-m' target flags.
7541
7542     At link time, these options are read in and reapplied.  Note that
7543     the current implementation makes no attempt to recognize
7544     conflicting values for these options.  If different files have
7545     conflicting option values (e.g., one file is compiled with '-fPIC'
7546     and another isn't), the compiler simply uses the last value read
7547     from the bytecode files.  It is recommended, then, that you compile
7548     all the files participating in the same link with the same options.
7549
7550     If LTO encounters objects with C linkage declared with incompatible
7551     types in separate translation units to be linked together
7552     (undefined behavior according to ISO C99 6.2.7), a non-fatal
7553     diagnostic may be issued.  The behavior is still undefined at run
7554     time.
7555
7556     Another feature of LTO is that it is possible to apply
7557     interprocedural optimizations on files written in different
7558     languages.  This requires support in the language front end.
7559     Currently, the C, C++ and Fortran front ends are capable of
7560     emitting GIMPLE bytecodes, so something like this should work:
7561
7562          gcc -c -flto foo.c
7563          g++ -c -flto bar.cc
7564          gfortran -c -flto baz.f90
7565          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7566
7567     Notice that the final link is done with 'g++' to get the C++
7568     runtime libraries and '-lgfortran' is added to get the Fortran
7569     runtime libraries.  In general, when mixing languages in LTO mode,
7570     you should use the same link command options as when mixing
7571     languages in a regular (non-LTO) compilation; all you need to add
7572     is '-flto' to all the compile and link commands.
7573
7574     If object files containing GIMPLE bytecode are stored in a library
7575     archive, say 'libfoo.a', it is possible to extract and use them in
7576     an LTO link if you are using a linker with plugin support.  To
7577     enable this feature, use the flag '-fuse-linker-plugin' at link
7578     time:
7579
7580          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7581
7582     With the linker plugin enabled, the linker extracts the needed
7583     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
7584     to make them part of the aggregated GIMPLE image to be optimized.
7585
7586     If you are not using a linker with plugin support and/or do not
7587     enable the linker plugin, then the objects inside 'libfoo.a' are
7588     extracted and linked as usual, but they do not participate in the
7589     LTO optimization process.
7590
7591     Link-time optimizations do not require the presence of the whole
7592     program to operate.  If the program does not require any symbols to
7593     be exported, it is possible to combine '-flto' and
7594     '-fwhole-program' to allow the interprocedural optimizers to use
7595     more aggressive assumptions which may lead to improved optimization
7596     opportunities.  Use of '-fwhole-program' is not needed when linker
7597     plugin is active (see '-fuse-linker-plugin').
7598
7599     The current implementation of LTO makes no attempt to generate
7600     bytecode that is portable between different types of hosts.  The
7601     bytecode files are versioned and there is a strict version check,
7602     so bytecode files generated in one version of GCC will not work
7603     with an older/newer version of GCC.
7604
7605     Link-time optimization does not work well with generation of
7606     debugging information.  Combining '-flto' with '-g' is currently
7607     experimental and expected to produce wrong results.
7608
7609     If you specify the optional N, the optimization and code generation
7610     done at link time is executed in parallel using N parallel jobs by
7611     utilizing an installed 'make' program.  The environment variable
7612     'MAKE' may be used to override the program used.  The default value
7613     for N is 1.
7614
7615     You can also specify '-flto=jobserver' to use GNU make's job server
7616     mode to determine the number of parallel jobs.  This is useful when
7617     the Makefile calling GCC is already executing in parallel.  You
7618     must prepend a '+' to the command recipe in the parent Makefile for
7619     this to work.  This option likely only works if 'MAKE' is GNU make.
7620
7621     This option is disabled by default.
7622
7623'-flto-partition=ALG'
7624     Specify the partitioning algorithm used by the link-time optimizer.
7625     The value is either '1to1' to specify a partitioning mirroring the
7626     original source files or 'balanced' to specify partitioning into
7627     equally sized chunks (whenever possible) or 'max' to create new
7628     partition for every symbol where possible.  Specifying 'none' as an
7629     algorithm disables partitioning and streaming completely.  The
7630     default value is 'balanced'.  While '1to1' can be used as an
7631     workaround for various code ordering issues, the 'max' partitioning
7632     is intended for internal testing only.
7633
7634'-flto-compression-level=N'
7635     This option specifies the level of compression used for
7636     intermediate language written to LTO object files, and is only
7637     meaningful in conjunction with LTO mode ('-flto').  Valid values
7638     are 0 (no compression) to 9 (maximum compression).  Values outside
7639     this range are clamped to either 0 or 9.  If the option is not
7640     given, a default balanced compression setting is used.
7641
7642'-flto-report'
7643     Prints a report with internal details on the workings of the
7644     link-time optimizer.  The contents of this report vary from version
7645     to version.  It is meant to be useful to GCC developers when
7646     processing object files in LTO mode (via '-flto').
7647
7648     Disabled by default.
7649
7650'-fuse-linker-plugin'
7651     Enables the use of a linker plugin during link-time optimization.
7652     This option relies on plugin support in the linker, which is
7653     available in gold or in GNU ld 2.21 or newer.
7654
7655     This option enables the extraction of object files with GIMPLE
7656     bytecode out of library archives.  This improves the quality of
7657     optimization by exposing more code to the link-time optimizer.
7658     This information specifies what symbols can be accessed externally
7659     (by non-LTO object or during dynamic linking).  Resulting code
7660     quality improvements on binaries (and shared libraries that use
7661     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
7662     for a description of the effect of this flag and how to use it.
7663
7664     This option is enabled by default when LTO support in GCC is
7665     enabled and GCC was configured for use with a linker supporting
7666     plugins (GNU ld 2.21 or newer or gold).
7667
7668'-ffat-lto-objects'
7669     Fat LTO objects are object files that contain both the intermediate
7670     language and the object code.  This makes them usable for both LTO
7671     linking and normal linking.  This option is effective only when
7672     compiling with '-flto' and is ignored at link time.
7673
7674     '-fno-fat-lto-objects' improves compilation time over plain LTO,
7675     but requires the complete toolchain to be aware of LTO. It requires
7676     a linker with linker plugin support for basic functionality.
7677     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
7678     plugins to allow a full-featured build environment (capable of
7679     building static libraries etc).  GCC provides the 'gcc-ar',
7680     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
7681     tools.  With non fat LTO makefiles need to be modified to use them.
7682
7683     The default is '-ffat-lto-objects' but this default is intended to
7684     change in future releases when linker plugin enabled environments
7685     become more common.
7686
7687'-fcompare-elim'
7688     After register allocation and post-register allocation instruction
7689     splitting, identify arithmetic instructions that compute processor
7690     flags similar to a comparison operation based on that arithmetic.
7691     If possible, eliminate the explicit comparison operation.
7692
7693     This pass only applies to certain targets that cannot explicitly
7694     represent the comparison operation before register allocation is
7695     complete.
7696
7697     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7698
7699'-fuse-ld=bfd'
7700     Use the 'bfd' linker instead of the default linker.
7701
7702'-fuse-ld=gold'
7703     Use the 'gold' linker instead of the default linker.
7704
7705'-fcprop-registers'
7706     After register allocation and post-register allocation instruction
7707     splitting, perform a copy-propagation pass to try to reduce
7708     scheduling dependencies and occasionally eliminate the copy.
7709
7710     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7711
7712'-fprofile-correction'
7713     Profiles collected using an instrumented binary for multi-threaded
7714     programs may be inconsistent due to missed counter updates.  When
7715     this option is specified, GCC uses heuristics to correct or smooth
7716     out such inconsistencies.  By default, GCC emits an error message
7717     when an inconsistent profile is detected.
7718
7719'-fprofile-dir=PATH'
7720
7721     Set the directory to search for the profile data files in to PATH.
7722     This option affects only the profile data generated by
7723     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
7724     by '-fprofile-use' and '-fbranch-probabilities' and its related
7725     options.  Both absolute and relative paths can be used.  By
7726     default, GCC uses the current directory as PATH, thus the profile
7727     data file appears in the same directory as the object file.
7728
7729'-fprofile-generate'
7730'-fprofile-generate=PATH'
7731
7732     Enable options usually used for instrumenting application to
7733     produce profile useful for later recompilation with profile
7734     feedback based optimization.  You must use '-fprofile-generate'
7735     both when compiling and when linking your program.
7736
7737     The following options are enabled: '-fprofile-arcs',
7738     '-fprofile-values', '-fvpt'.
7739
7740     If PATH is specified, GCC looks at the PATH to find the profile
7741     feedback data files.  See '-fprofile-dir'.
7742
7743'-fprofile-use'
7744'-fprofile-use=PATH'
7745     Enable profile feedback directed optimizations, and optimizations
7746     generally profitable only with profile feedback available.
7747
7748     The following options are enabled: '-fbranch-probabilities',
7749     '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer',
7750     '-ftree-vectorize', 'ftree-loop-distribute-patterns'
7751
7752     By default, GCC emits an error message if the feedback profiles do
7753     not match the source code.  This error can be turned into a warning
7754     by using '-Wcoverage-mismatch'.  Note this may result in poorly
7755     optimized code.
7756
7757     If PATH is specified, GCC looks at the PATH to find the profile
7758     feedback data files.  See '-fprofile-dir'.
7759
7760 The following options control compiler behavior regarding
7761floating-point arithmetic.  These options trade off between speed and
7762correctness.  All must be specifically enabled.
7763
7764'-ffloat-store'
7765     Do not store floating-point variables in registers, and inhibit
7766     other options that might change whether a floating-point value is
7767     taken from a register or memory.
7768
7769     This option prevents undesirable excess precision on machines such
7770     as the 68000 where the floating registers (of the 68881) keep more
7771     precision than a 'double' is supposed to have.  Similarly for the
7772     x86 architecture.  For most programs, the excess precision does
7773     only good, but a few programs rely on the precise definition of
7774     IEEE floating point.  Use '-ffloat-store' for such programs, after
7775     modifying them to store all pertinent intermediate computations
7776     into variables.
7777
7778'-fexcess-precision=STYLE'
7779     This option allows further control over excess precision on
7780     machines where floating-point registers have more precision than
7781     the IEEE 'float' and 'double' types and the processor does not
7782     support operations rounding to those types.  By default,
7783     '-fexcess-precision=fast' is in effect; this means that operations
7784     are carried out in the precision of the registers and that it is
7785     unpredictable when rounding to the types specified in the source
7786     code takes place.  When compiling C, if
7787     '-fexcess-precision=standard' is specified then excess precision
7788     follows the rules specified in ISO C99; in particular, both casts
7789     and assignments cause values to be rounded to their semantic types
7790     (whereas '-ffloat-store' only affects assignments).  This option is
7791     enabled by default for C if a strict conformance option such as
7792     '-std=c99' is used.
7793
7794     '-fexcess-precision=standard' is not implemented for languages
7795     other than C, and has no effect if '-funsafe-math-optimizations' or
7796     '-ffast-math' is specified.  On the x86, it also has no effect if
7797     '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former
7798     case, IEEE semantics apply without excess precision, and in the
7799     latter, rounding is unpredictable.
7800
7801'-ffast-math'
7802     Sets '-fno-math-errno', '-funsafe-math-optimizations',
7803     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans'
7804     and '-fcx-limited-range'.
7805
7806     This option causes the preprocessor macro '__FAST_MATH__' to be
7807     defined.
7808
7809     This option is not turned on by any '-O' option besides '-Ofast'
7810     since it can result in incorrect output for programs that depend on
7811     an exact implementation of IEEE or ISO rules/specifications for
7812     math functions.  It may, however, yield faster code for programs
7813     that do not require the guarantees of these specifications.
7814
7815'-fno-math-errno'
7816     Do not set 'errno' after calling math functions that are executed
7817     with a single instruction, e.g., 'sqrt'.  A program that relies on
7818     IEEE exceptions for math error handling may want to use this flag
7819     for speed while maintaining IEEE arithmetic compatibility.
7820
7821     This option is not turned on by any '-O' option since it can result
7822     in incorrect output for programs that depend on an exact
7823     implementation of IEEE or ISO rules/specifications for math
7824     functions.  It may, however, yield faster code for programs that do
7825     not require the guarantees of these specifications.
7826
7827     The default is '-fmath-errno'.
7828
7829     On Darwin systems, the math library never sets 'errno'.  There is
7830     therefore no reason for the compiler to consider the possibility
7831     that it might, and '-fno-math-errno' is the default.
7832
7833'-funsafe-math-optimizations'
7834
7835     Allow optimizations for floating-point arithmetic that (a) assume
7836     that arguments and results are valid and (b) may violate IEEE or
7837     ANSI standards.  When used at link-time, it may include libraries
7838     or startup files that change the default FPU control word or other
7839     similar optimizations.
7840
7841     This option is not turned on by any '-O' option since it can result
7842     in incorrect output for programs that depend on an exact
7843     implementation of IEEE or ISO rules/specifications for math
7844     functions.  It may, however, yield faster code for programs that do
7845     not require the guarantees of these specifications.  Enables
7846     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
7847     '-freciprocal-math'.
7848
7849     The default is '-fno-unsafe-math-optimizations'.
7850
7851'-fassociative-math'
7852
7853     Allow re-association of operands in series of floating-point
7854     operations.  This violates the ISO C and C++ language standard by
7855     possibly changing computation result.  NOTE: re-ordering may change
7856     the sign of zero as well as ignore NaNs and inhibit or create
7857     underflow or overflow (and thus cannot be used on code that relies
7858     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
7859     floating-point comparisons and thus may not be used when ordered
7860     comparisons are required.  This option requires that both
7861     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
7862     Moreover, it doesn't make much sense with '-frounding-math'.  For
7863     Fortran the option is automatically enabled when both
7864     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
7865
7866     The default is '-fno-associative-math'.
7867
7868'-freciprocal-math'
7869
7870     Allow the reciprocal of a value to be used instead of dividing by
7871     the value if this enables optimizations.  For example 'x / y' can
7872     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
7873     to common subexpression elimination.  Note that this loses
7874     precision and increases the number of flops operating on the value.
7875
7876     The default is '-fno-reciprocal-math'.
7877
7878'-ffinite-math-only'
7879     Allow optimizations for floating-point arithmetic that assume that
7880     arguments and results are not NaNs or +-Infs.
7881
7882     This option is not turned on by any '-O' option since it can result
7883     in incorrect output for programs that depend on an exact
7884     implementation of IEEE or ISO rules/specifications for math
7885     functions.  It may, however, yield faster code for programs that do
7886     not require the guarantees of these specifications.
7887
7888     The default is '-fno-finite-math-only'.
7889
7890'-fno-signed-zeros'
7891     Allow optimizations for floating-point arithmetic that ignore the
7892     signedness of zero.  IEEE arithmetic specifies the behavior of
7893     distinct +0.0 and -0.0 values, which then prohibits simplification
7894     of expressions such as x+0.0 or 0.0*x (even with
7895     '-ffinite-math-only').  This option implies that the sign of a zero
7896     result isn't significant.
7897
7898     The default is '-fsigned-zeros'.
7899
7900'-fno-trapping-math'
7901     Compile code assuming that floating-point operations cannot
7902     generate user-visible traps.  These traps include division by zero,
7903     overflow, underflow, inexact result and invalid operation.  This
7904     option requires that '-fno-signaling-nans' be in effect.  Setting
7905     this option may allow faster code if one relies on "non-stop" IEEE
7906     arithmetic, for example.
7907
7908     This option should never be turned on by any '-O' option since it
7909     can result in incorrect output for programs that depend on an exact
7910     implementation of IEEE or ISO rules/specifications for math
7911     functions.
7912
7913     The default is '-ftrapping-math'.
7914
7915'-frounding-math'
7916     Disable transformations and optimizations that assume default
7917     floating-point rounding behavior.  This is round-to-zero for all
7918     floating point to integer conversions, and round-to-nearest for all
7919     other arithmetic truncations.  This option should be specified for
7920     programs that change the FP rounding mode dynamically, or that may
7921     be executed with a non-default rounding mode.  This option disables
7922     constant folding of floating-point expressions at compile time
7923     (which may be affected by rounding mode) and arithmetic
7924     transformations that are unsafe in the presence of sign-dependent
7925     rounding modes.
7926
7927     The default is '-fno-rounding-math'.
7928
7929     This option is experimental and does not currently guarantee to
7930     disable all GCC optimizations that are affected by rounding mode.
7931     Future versions of GCC may provide finer control of this setting
7932     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
7933     used to specify the default state for 'FENV_ACCESS'.
7934
7935'-fsignaling-nans'
7936     Compile code assuming that IEEE signaling NaNs may generate
7937     user-visible traps during floating-point operations.  Setting this
7938     option disables optimizations that may change the number of
7939     exceptions visible with signaling NaNs.  This option implies
7940     '-ftrapping-math'.
7941
7942     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
7943     defined.
7944
7945     The default is '-fno-signaling-nans'.
7946
7947     This option is experimental and does not currently guarantee to
7948     disable all GCC optimizations that affect signaling NaN behavior.
7949
7950'-fsingle-precision-constant'
7951     Treat floating-point constants as single precision instead of
7952     implicitly converting them to double-precision constants.
7953
7954'-fcx-limited-range'
7955     When enabled, this option states that a range reduction step is not
7956     needed when performing complex division.  Also, there is no
7957     checking whether the result of a complex multiplication or division
7958     is 'NaN + I*NaN', with an attempt to rescue the situation in that
7959     case.  The default is '-fno-cx-limited-range', but is enabled by
7960     '-ffast-math'.
7961
7962     This option controls the default setting of the ISO C99
7963     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
7964     languages.
7965
7966'-fcx-fortran-rules'
7967     Complex multiplication and division follow Fortran rules.  Range
7968     reduction is done as part of complex division, but there is no
7969     checking whether the result of a complex multiplication or division
7970     is 'NaN + I*NaN', with an attempt to rescue the situation in that
7971     case.
7972
7973     The default is '-fno-cx-fortran-rules'.
7974
7975 The following options control optimizations that may improve
7976performance, but are not enabled by any '-O' options.  This section
7977includes experimental options that may produce broken code.
7978
7979'-fbranch-probabilities'
7980     After running a program compiled with '-fprofile-arcs' (*note
7981     Options for Debugging Your Program or 'gcc': Debugging Options.),
7982     you can compile it a second time using '-fbranch-probabilities', to
7983     improve optimizations based on the number of times each branch was
7984     taken.  When a program compiled with '-fprofile-arcs' exits, it
7985     saves arc execution counts to a file called 'SOURCENAME.gcda' for
7986     each source file.  The information in this data file is very
7987     dependent on the structure of the generated code, so you must use
7988     the same source code and the same optimization options for both
7989     compilations.
7990
7991     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
7992     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
7993     optimization.  Currently, they are only used in one place: in
7994     'reorg.c', instead of guessing which path a branch is most likely
7995     to take, the 'REG_BR_PROB' values are used to exactly determine
7996     which path is taken more often.
7997
7998'-fprofile-values'
7999     If combined with '-fprofile-arcs', it adds code so that some data
8000     about values of expressions in the program is gathered.
8001
8002     With '-fbranch-probabilities', it reads back the data gathered from
8003     profiling values of expressions for usage in optimizations.
8004
8005     Enabled with '-fprofile-generate' and '-fprofile-use'.
8006
8007'-fvpt'
8008     If combined with '-fprofile-arcs', this option instructs the
8009     compiler to add code to gather information about values of
8010     expressions.
8011
8012     With '-fbranch-probabilities', it reads back the data gathered and
8013     actually performs the optimizations based on them.  Currently the
8014     optimizations include specialization of division operations using
8015     the knowledge about the value of the denominator.
8016
8017'-frename-registers'
8018     Attempt to avoid false dependencies in scheduled code by making use
8019     of registers left over after register allocation.  This
8020     optimization most benefits processors with lots of registers.
8021     Depending on the debug information format adopted by the target,
8022     however, it can make debugging impossible, since variables no
8023     longer stay in a "home register".
8024
8025     Enabled by default with '-funroll-loops' and '-fpeel-loops'.
8026
8027'-ftracer'
8028     Perform tail duplication to enlarge superblock size.  This
8029     transformation simplifies the control flow of the function allowing
8030     other optimizations to do a better job.
8031
8032     Enabled with '-fprofile-use'.
8033
8034'-funroll-loops'
8035     Unroll loops whose number of iterations can be determined at
8036     compile time or upon entry to the loop.  '-funroll-loops' implies
8037     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
8038     also turns on complete loop peeling (i.e. complete removal of loops
8039     with a small constant number of iterations).  This option makes
8040     code larger, and may or may not make it run faster.
8041
8042     Enabled with '-fprofile-use'.
8043
8044'-funroll-all-loops'
8045     Unroll all loops, even if their number of iterations is uncertain
8046     when the loop is entered.  This usually makes programs run more
8047     slowly.  '-funroll-all-loops' implies the same options as
8048     '-funroll-loops'.
8049
8050'-fpeel-loops'
8051     Peels loops for which there is enough information that they do not
8052     roll much (from profile feedback).  It also turns on complete loop
8053     peeling (i.e. complete removal of loops with small constant number
8054     of iterations).
8055
8056     Enabled with '-fprofile-use'.
8057
8058'-fmove-loop-invariants'
8059     Enables the loop invariant motion pass in the RTL loop optimizer.
8060     Enabled at level '-O1'
8061
8062'-funswitch-loops'
8063     Move branches with loop invariant conditions out of the loop, with
8064     duplicates of the loop on both branches (modified according to
8065     result of the condition).
8066
8067'-ffunction-sections'
8068'-fdata-sections'
8069     Place each function or data item into its own section in the output
8070     file if the target supports arbitrary sections.  The name of the
8071     function or the name of the data item determines the section's name
8072     in the output file.
8073
8074     Use these options on systems where the linker can perform
8075     optimizations to improve locality of reference in the instruction
8076     space.  Most systems using the ELF object format and SPARC
8077     processors running Solaris 2 have linkers with such optimizations.
8078     AIX may have these optimizations in the future.
8079
8080     Only use these options when there are significant benefits from
8081     doing so.  When you specify these options, the assembler and linker
8082     create larger object and executable files and are also slower.  You
8083     cannot use 'gprof' on all systems if you specify this option, and
8084     you may have problems with debugging if you specify both this
8085     option and '-g'.
8086
8087'-fbranch-target-load-optimize'
8088     Perform branch target register load optimization before prologue /
8089     epilogue threading.  The use of target registers can typically be
8090     exposed only during reload, thus hoisting loads out of loops and
8091     doing inter-block scheduling needs a separate optimization pass.
8092
8093'-fbranch-target-load-optimize2'
8094     Perform branch target register load optimization after prologue /
8095     epilogue threading.
8096
8097'-fbtr-bb-exclusive'
8098     When performing branch target register load optimization, don't
8099     reuse branch target registers within any basic block.
8100
8101'-fstack-protector'
8102     Emit extra code to check for buffer overflows, such as stack
8103     smashing attacks.  This is done by adding a guard variable to
8104     functions with vulnerable objects.  This includes functions that
8105     call 'alloca', and functions with buffers larger than 8 bytes.  The
8106     guards are initialized when a function is entered and then checked
8107     when the function exits.  If a guard check fails, an error message
8108     is printed and the program exits.
8109
8110'-fstack-protector-all'
8111     Like '-fstack-protector' except that all functions are protected.
8112
8113'-fsection-anchors'
8114     Try to reduce the number of symbolic address calculations by using
8115     shared "anchor" symbols to address nearby objects.  This
8116     transformation can help to reduce the number of GOT entries and GOT
8117     accesses on some targets.
8118
8119     For example, the implementation of the following function 'foo':
8120
8121          static int a, b, c;
8122          int foo (void) { return a + b + c; }
8123
8124     usually calculates the addresses of all three variables, but if you
8125     compile it with '-fsection-anchors', it accesses the variables from
8126     a common anchor point instead.  The effect is similar to the
8127     following pseudocode (which isn't valid C):
8128
8129          int foo (void)
8130          {
8131            register int *xr = &x;
8132            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8133          }
8134
8135     Not all targets support this option.
8136
8137'--param NAME=VALUE'
8138     In some places, GCC uses various constants to control the amount of
8139     optimization that is done.  For example, GCC does not inline
8140     functions that contain more than a certain number of instructions.
8141     You can control some of these constants on the command line using
8142     the '--param' option.
8143
8144     The names of specific parameters, and the meaning of the values,
8145     are tied to the internals of the compiler, and are subject to
8146     change without notice in future releases.
8147
8148     In each case, the VALUE is an integer.  The allowable choices for
8149     NAME are:
8150
8151     'predictable-branch-outcome'
8152          When branch is predicted to be taken with probability lower
8153          than this threshold (in percent), then it is considered well
8154          predictable.  The default is 10.
8155
8156     'max-crossjump-edges'
8157          The maximum number of incoming edges to consider for
8158          cross-jumping.  The algorithm used by '-fcrossjumping' is
8159          O(N^2) in the number of edges incoming to each block.
8160          Increasing values mean more aggressive optimization, making
8161          the compilation time increase with probably small improvement
8162          in executable size.
8163
8164     'min-crossjump-insns'
8165          The minimum number of instructions that must be matched at the
8166          end of two blocks before cross-jumping is performed on them.
8167          This value is ignored in the case where all instructions in
8168          the block being cross-jumped from are matched.  The default
8169          value is 5.
8170
8171     'max-grow-copy-bb-insns'
8172          The maximum code size expansion factor when copying basic
8173          blocks instead of jumping.  The expansion is relative to a
8174          jump instruction.  The default value is 8.
8175
8176     'max-goto-duplication-insns'
8177          The maximum number of instructions to duplicate to a block
8178          that jumps to a computed goto.  To avoid O(N^2) behavior in a
8179          number of passes, GCC factors computed gotos early in the
8180          compilation process, and unfactors them as late as possible.
8181          Only computed jumps at the end of a basic blocks with no more
8182          than max-goto-duplication-insns are unfactored.  The default
8183          value is 8.
8184
8185     'max-delay-slot-insn-search'
8186          The maximum number of instructions to consider when looking
8187          for an instruction to fill a delay slot.  If more than this
8188          arbitrary number of instructions are searched, the time
8189          savings from filling the delay slot are minimal, so stop
8190          searching.  Increasing values mean more aggressive
8191          optimization, making the compilation time increase with
8192          probably small improvement in execution time.
8193
8194     'max-delay-slot-live-search'
8195          When trying to fill delay slots, the maximum number of
8196          instructions to consider when searching for a block with valid
8197          live register information.  Increasing this arbitrarily chosen
8198          value means more aggressive optimization, increasing the
8199          compilation time.  This parameter should be removed when the
8200          delay slot code is rewritten to maintain the control-flow
8201          graph.
8202
8203     'max-gcse-memory'
8204          The approximate maximum amount of memory that can be allocated
8205          in order to perform the global common subexpression
8206          elimination optimization.  If more memory than specified is
8207          required, the optimization is not done.
8208
8209     'max-gcse-insertion-ratio'
8210          If the ratio of expression insertions to deletions is larger
8211          than this value for any expression, then RTL PRE inserts or
8212          removes the expression and thus leaves partially redundant
8213          computations in the instruction stream.  The default value is
8214          20.
8215
8216     'max-pending-list-length'
8217          The maximum number of pending dependencies scheduling allows
8218          before flushing the current state and starting over.  Large
8219          functions with few branches or calls can create excessively
8220          large lists which needlessly consume memory and resources.
8221
8222     'max-modulo-backtrack-attempts'
8223          The maximum number of backtrack attempts the scheduler should
8224          make when modulo scheduling a loop.  Larger values can
8225          exponentially increase compilation time.
8226
8227     'max-inline-insns-single'
8228          Several parameters control the tree inliner used in GCC.  This
8229          number sets the maximum number of instructions (counted in
8230          GCC's internal representation) in a single function that the
8231          tree inliner considers for inlining.  This only affects
8232          functions declared inline and methods implemented in a class
8233          declaration (C++).  The default value is 400.
8234
8235     'max-inline-insns-auto'
8236          When you use '-finline-functions' (included in '-O3'), a lot
8237          of functions that would otherwise not be considered for
8238          inlining by the compiler are investigated.  To those
8239          functions, a different (more restrictive) limit compared to
8240          functions declared inline can be applied.  The default value
8241          is 40.
8242
8243     'inline-min-speedup'
8244          When estimated performance improvement of caller + callee
8245          runtime exceeds this threshold (in precent), the function can
8246          be inlined regardless the limit on '--param
8247          max-inline-insns-single' and '--param max-inline-insns-auto'.
8248
8249     'large-function-insns'
8250          The limit specifying really large functions.  For functions
8251          larger than this limit after inlining, inlining is constrained
8252          by '--param large-function-growth'.  This parameter is useful
8253          primarily to avoid extreme compilation time caused by
8254          non-linear algorithms used by the back end.  The default value
8255          is 2700.
8256
8257     'large-function-growth'
8258          Specifies maximal growth of large function caused by inlining
8259          in percents.  The default value is 100 which limits large
8260          function growth to 2.0 times the original size.
8261
8262     'large-unit-insns'
8263          The limit specifying large translation unit.  Growth caused by
8264          inlining of units larger than this limit is limited by
8265          '--param inline-unit-growth'.  For small units this might be
8266          too tight.  For example, consider a unit consisting of
8267          function A that is inline and B that just calls A three times.
8268          If B is small relative to A, the growth of unit is 300\% and
8269          yet such inlining is very sane.  For very large units
8270          consisting of small inlineable functions, however, the overall
8271          unit growth limit is needed to avoid exponential explosion of
8272          code size.  Thus for smaller units, the size is increased to
8273          '--param large-unit-insns' before applying '--param
8274          inline-unit-growth'.  The default is 10000.
8275
8276     'inline-unit-growth'
8277          Specifies maximal overall growth of the compilation unit
8278          caused by inlining.  The default value is 30 which limits unit
8279          growth to 1.3 times the original size.
8280
8281     'ipcp-unit-growth'
8282          Specifies maximal overall growth of the compilation unit
8283          caused by interprocedural constant propagation.  The default
8284          value is 10 which limits unit growth to 1.1 times the original
8285          size.
8286
8287     'large-stack-frame'
8288          The limit specifying large stack frames.  While inlining the
8289          algorithm is trying to not grow past this limit too much.  The
8290          default value is 256 bytes.
8291
8292     'large-stack-frame-growth'
8293          Specifies maximal growth of large stack frames caused by
8294          inlining in percents.  The default value is 1000 which limits
8295          large stack frame growth to 11 times the original size.
8296
8297     'max-inline-insns-recursive'
8298     'max-inline-insns-recursive-auto'
8299          Specifies the maximum number of instructions an out-of-line
8300          copy of a self-recursive inline function can grow into by
8301          performing recursive inlining.
8302
8303          For functions declared inline, '--param
8304          max-inline-insns-recursive' is taken into account.  For
8305          functions not declared inline, recursive inlining happens only
8306          when '-finline-functions' (included in '-O3') is enabled and
8307          '--param max-inline-insns-recursive-auto' is used.  The
8308          default value is 450.
8309
8310     'max-inline-recursive-depth'
8311     'max-inline-recursive-depth-auto'
8312          Specifies the maximum recursion depth used for recursive
8313          inlining.
8314
8315          For functions declared inline, '--param
8316          max-inline-recursive-depth' is taken into account.  For
8317          functions not declared inline, recursive inlining happens only
8318          when '-finline-functions' (included in '-O3') is enabled and
8319          '--param max-inline-recursive-depth-auto' is used.  The
8320          default value is 8.
8321
8322     'min-inline-recursive-probability'
8323          Recursive inlining is profitable only for function having deep
8324          recursion in average and can hurt for function having little
8325          recursion depth by increasing the prologue size or complexity
8326          of function body to other optimizers.
8327
8328          When profile feedback is available (see '-fprofile-generate')
8329          the actual recursion depth can be guessed from probability
8330          that function recurses via a given call expression.  This
8331          parameter limits inlining only to call expressions whose
8332          probability exceeds the given threshold (in percents).  The
8333          default value is 10.
8334
8335     'early-inlining-insns'
8336          Specify growth that the early inliner can make.  In effect it
8337          increases the amount of inlining for code having a large
8338          abstraction penalty.  The default value is 10.
8339
8340     'max-early-inliner-iterations'
8341     'max-early-inliner-iterations'
8342          Limit of iterations of the early inliner.  This basically
8343          bounds the number of nested indirect calls the early inliner
8344          can resolve.  Deeper chains are still handled by late
8345          inlining.
8346
8347     'comdat-sharing-probability'
8348     'comdat-sharing-probability'
8349          Probability (in percent) that C++ inline function with comdat
8350          visibility are shared across multiple compilation units.  The
8351          default value is 20.
8352
8353     'min-vect-loop-bound'
8354          The minimum number of iterations under which loops are not
8355          vectorized when '-ftree-vectorize' is used.  The number of
8356          iterations after vectorization needs to be greater than the
8357          value specified by this option to allow vectorization.  The
8358          default value is 0.
8359
8360     'gcse-cost-distance-ratio'
8361          Scaling factor in calculation of maximum distance an
8362          expression can be moved by GCSE optimizations.  This is
8363          currently supported only in the code hoisting pass.  The
8364          bigger the ratio, the more aggressive code hoisting is with
8365          simple expressions, i.e., the expressions that have cost less
8366          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
8367          of simple expressions.  The default value is 10.
8368
8369     'gcse-unrestricted-cost'
8370          Cost, roughly measured as the cost of a single typical machine
8371          instruction, at which GCSE optimizations do not constrain the
8372          distance an expression can travel.  This is currently
8373          supported only in the code hoisting pass.  The lesser the
8374          cost, the more aggressive code hoisting is.  Specifying 0
8375          allows all expressions to travel unrestricted distances.  The
8376          default value is 3.
8377
8378     'max-hoist-depth'
8379          The depth of search in the dominator tree for expressions to
8380          hoist.  This is used to avoid quadratic behavior in hoisting
8381          algorithm.  The value of 0 does not limit on the search, but
8382          may slow down compilation of huge functions.  The default
8383          value is 30.
8384
8385     'max-tail-merge-comparisons'
8386          The maximum amount of similar bbs to compare a bb with.  This
8387          is used to avoid quadratic behavior in tree tail merging.  The
8388          default value is 10.
8389
8390     'max-tail-merge-iterations'
8391          The maximum amount of iterations of the pass over the
8392          function.  This is used to limit compilation time in tree tail
8393          merging.  The default value is 2.
8394
8395     'max-unrolled-insns'
8396          The maximum number of instructions that a loop may have to be
8397          unrolled.  If a loop is unrolled, this parameter also
8398          determines how many times the loop code is unrolled.
8399
8400     'max-average-unrolled-insns'
8401          The maximum number of instructions biased by probabilities of
8402          their execution that a loop may have to be unrolled.  If a
8403          loop is unrolled, this parameter also determines how many
8404          times the loop code is unrolled.
8405
8406     'max-unroll-times'
8407          The maximum number of unrollings of a single loop.
8408
8409     'max-peeled-insns'
8410          The maximum number of instructions that a loop may have to be
8411          peeled.  If a loop is peeled, this parameter also determines
8412          how many times the loop code is peeled.
8413
8414     'max-peel-times'
8415          The maximum number of peelings of a single loop.
8416
8417     'max-peel-branches'
8418          The maximum number of branches on the hot path through the
8419          peeled sequence.
8420
8421     'max-completely-peeled-insns'
8422          The maximum number of insns of a completely peeled loop.
8423
8424     'max-completely-peel-times'
8425          The maximum number of iterations of a loop to be suitable for
8426          complete peeling.
8427
8428     'max-completely-peel-loop-nest-depth'
8429          The maximum depth of a loop nest suitable for complete
8430          peeling.
8431
8432     'max-unswitch-insns'
8433          The maximum number of insns of an unswitched loop.
8434
8435     'max-unswitch-level'
8436          The maximum number of branches unswitched in a single loop.
8437
8438     'lim-expensive'
8439          The minimum cost of an expensive expression in the loop
8440          invariant motion.
8441
8442     'iv-consider-all-candidates-bound'
8443          Bound on number of candidates for induction variables, below
8444          which all candidates are considered for each use in induction
8445          variable optimizations.  If there are more candidates than
8446          this, only the most relevant ones are considered to avoid
8447          quadratic time complexity.
8448
8449     'iv-max-considered-uses'
8450          The induction variable optimizations give up on loops that
8451          contain more induction variable uses.
8452
8453     'iv-always-prune-cand-set-bound'
8454          If the number of candidates in the set is smaller than this
8455          value, always try to remove unnecessary ivs from the set when
8456          adding a new one.
8457
8458     'scev-max-expr-size'
8459          Bound on size of expressions used in the scalar evolutions
8460          analyzer.  Large expressions slow the analyzer.
8461
8462     'scev-max-expr-complexity'
8463          Bound on the complexity of the expressions in the scalar
8464          evolutions analyzer.  Complex expressions slow the analyzer.
8465
8466     'omega-max-vars'
8467          The maximum number of variables in an Omega constraint system.
8468          The default value is 128.
8469
8470     'omega-max-geqs'
8471          The maximum number of inequalities in an Omega constraint
8472          system.  The default value is 256.
8473
8474     'omega-max-eqs'
8475          The maximum number of equalities in an Omega constraint
8476          system.  The default value is 128.
8477
8478     'omega-max-wild-cards'
8479          The maximum number of wildcard variables that the Omega solver
8480          is able to insert.  The default value is 18.
8481
8482     'omega-hash-table-size'
8483          The size of the hash table in the Omega solver.  The default
8484          value is 550.
8485
8486     'omega-max-keys'
8487          The maximal number of keys used by the Omega solver.  The
8488          default value is 500.
8489
8490     'omega-eliminate-redundant-constraints'
8491          When set to 1, use expensive methods to eliminate all
8492          redundant constraints.  The default value is 0.
8493
8494     'vect-max-version-for-alignment-checks'
8495          The maximum number of run-time checks that can be performed
8496          when doing loop versioning for alignment in the vectorizer.
8497          See option '-ftree-vect-loop-version' for more information.
8498
8499     'vect-max-version-for-alias-checks'
8500          The maximum number of run-time checks that can be performed
8501          when doing loop versioning for alias in the vectorizer.  See
8502          option '-ftree-vect-loop-version' for more information.
8503
8504     'max-iterations-to-track'
8505          The maximum number of iterations of a loop the brute-force
8506          algorithm for analysis of the number of iterations of the loop
8507          tries to evaluate.
8508
8509     'hot-bb-count-ws-permille'
8510          A basic block profile count is considered hot if it
8511          contributes to the given permillage (i.e.  0...1000) of the
8512          entire profiled execution.
8513
8514     'hot-bb-frequency-fraction'
8515          Select fraction of the entry block frequency of executions of
8516          basic block in function given basic block needs to have to be
8517          considered hot.
8518
8519     'max-predicted-iterations'
8520          The maximum number of loop iterations we predict statically.
8521          This is useful in cases where a function contains a single
8522          loop with known bound and another loop with unknown bound.
8523          The known number of iterations is predicted correctly, while
8524          the unknown number of iterations average to roughly 10.  This
8525          means that the loop without bounds appears artificially cold
8526          relative to the other one.
8527
8528     'align-threshold'
8529
8530          Select fraction of the maximal frequency of executions of a
8531          basic block in a function to align the basic block.
8532
8533     'align-loop-iterations'
8534
8535          A loop expected to iterate at least the selected number of
8536          iterations is aligned.
8537
8538     'tracer-dynamic-coverage'
8539     'tracer-dynamic-coverage-feedback'
8540
8541          This value is used to limit superblock formation once the
8542          given percentage of executed instructions is covered.  This
8543          limits unnecessary code size expansion.
8544
8545          The 'tracer-dynamic-coverage-feedback' is used only when
8546          profile feedback is available.  The real profiles (as opposed
8547          to statically estimated ones) are much less balanced allowing
8548          the threshold to be larger value.
8549
8550     'tracer-max-code-growth'
8551          Stop tail duplication once code growth has reached given
8552          percentage.  This is a rather artificial limit, as most of the
8553          duplicates are eliminated later in cross jumping, so it may be
8554          set to much higher values than is the desired code growth.
8555
8556     'tracer-min-branch-ratio'
8557
8558          Stop reverse growth when the reverse probability of best edge
8559          is less than this threshold (in percent).
8560
8561     'tracer-min-branch-ratio'
8562     'tracer-min-branch-ratio-feedback'
8563
8564          Stop forward growth if the best edge has probability lower
8565          than this threshold.
8566
8567          Similarly to 'tracer-dynamic-coverage' two values are present,
8568          one for compilation for profile feedback and one for
8569          compilation without.  The value for compilation with profile
8570          feedback needs to be more conservative (higher) in order to
8571          make tracer effective.
8572
8573     'max-cse-path-length'
8574
8575          The maximum number of basic blocks on path that CSE considers.
8576          The default is 10.
8577
8578     'max-cse-insns'
8579          The maximum number of instructions CSE processes before
8580          flushing.  The default is 1000.
8581
8582     'ggc-min-expand'
8583
8584          GCC uses a garbage collector to manage its own memory
8585          allocation.  This parameter specifies the minimum percentage
8586          by which the garbage collector's heap should be allowed to
8587          expand between collections.  Tuning this may improve
8588          compilation speed; it has no effect on code generation.
8589
8590          The default is 30% + 70% * (RAM/1GB) with an upper bound of
8591          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
8592          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
8593          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
8594          particular platform, the lower bound of 30% is used.  Setting
8595          this parameter and 'ggc-min-heapsize' to zero causes a full
8596          collection to occur at every opportunity.  This is extremely
8597          slow, but can be useful for debugging.
8598
8599     'ggc-min-heapsize'
8600
8601          Minimum size of the garbage collector's heap before it begins
8602          bothering to collect garbage.  The first collection occurs
8603          after the heap expands by 'ggc-min-expand'% beyond
8604          'ggc-min-heapsize'.  Again, tuning this may improve
8605          compilation speed, and has no effect on code generation.
8606
8607          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8608          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8609          exceeded, but with a lower bound of 4096 (four megabytes) and
8610          an upper bound of 131072 (128 megabytes).  If GCC is not able
8611          to calculate RAM on a particular platform, the lower bound is
8612          used.  Setting this parameter very large effectively disables
8613          garbage collection.  Setting this parameter and
8614          'ggc-min-expand' to zero causes a full collection to occur at
8615          every opportunity.
8616
8617     'max-reload-search-insns'
8618          The maximum number of instruction reload should look backward
8619          for equivalent register.  Increasing values mean more
8620          aggressive optimization, making the compilation time increase
8621          with probably slightly better performance.  The default value
8622          is 100.
8623
8624     'max-cselib-memory-locations'
8625          The maximum number of memory locations cselib should take into
8626          account.  Increasing values mean more aggressive optimization,
8627          making the compilation time increase with probably slightly
8628          better performance.  The default value is 500.
8629
8630     'reorder-blocks-duplicate'
8631     'reorder-blocks-duplicate-feedback'
8632
8633          Used by the basic block reordering pass to decide whether to
8634          use unconditional branch or duplicate the code on its
8635          destination.  Code is duplicated when its estimated size is
8636          smaller than this value multiplied by the estimated size of
8637          unconditional jump in the hot spots of the program.
8638
8639          The 'reorder-block-duplicate-feedback' is used only when
8640          profile feedback is available.  It may be set to higher values
8641          than 'reorder-block-duplicate' since information about the hot
8642          spots is more accurate.
8643
8644     'max-sched-ready-insns'
8645          The maximum number of instructions ready to be issued the
8646          scheduler should consider at any given time during the first
8647          scheduling pass.  Increasing values mean more thorough
8648          searches, making the compilation time increase with probably
8649          little benefit.  The default value is 100.
8650
8651     'max-sched-region-blocks'
8652          The maximum number of blocks in a region to be considered for
8653          interblock scheduling.  The default value is 10.
8654
8655     'max-pipeline-region-blocks'
8656          The maximum number of blocks in a region to be considered for
8657          pipelining in the selective scheduler.  The default value is
8658          15.
8659
8660     'max-sched-region-insns'
8661          The maximum number of insns in a region to be considered for
8662          interblock scheduling.  The default value is 100.
8663
8664     'max-pipeline-region-insns'
8665          The maximum number of insns in a region to be considered for
8666          pipelining in the selective scheduler.  The default value is
8667          200.
8668
8669     'min-spec-prob'
8670          The minimum probability (in percents) of reaching a source
8671          block for interblock speculative scheduling.  The default
8672          value is 40.
8673
8674     'max-sched-extend-regions-iters'
8675          The maximum number of iterations through CFG to extend
8676          regions.  A value of 0 (the default) disables region
8677          extensions.
8678
8679     'max-sched-insn-conflict-delay'
8680          The maximum conflict delay for an insn to be considered for
8681          speculative motion.  The default value is 3.
8682
8683     'sched-spec-prob-cutoff'
8684          The minimal probability of speculation success (in percents),
8685          so that speculative insns are scheduled.  The default value is
8686          40.
8687
8688     'sched-spec-state-edge-prob-cutoff'
8689          The minimum probability an edge must have for the scheduler to
8690          save its state across it.  The default value is 10.
8691
8692     'sched-mem-true-dep-cost'
8693          Minimal distance (in CPU cycles) between store and load
8694          targeting same memory locations.  The default value is 1.
8695
8696     'selsched-max-lookahead'
8697          The maximum size of the lookahead window of selective
8698          scheduling.  It is a depth of search for available
8699          instructions.  The default value is 50.
8700
8701     'selsched-max-sched-times'
8702          The maximum number of times that an instruction is scheduled
8703          during selective scheduling.  This is the limit on the number
8704          of iterations through which the instruction may be pipelined.
8705          The default value is 2.
8706
8707     'selsched-max-insns-to-rename'
8708          The maximum number of best instructions in the ready list that
8709          are considered for renaming in the selective scheduler.  The
8710          default value is 2.
8711
8712     'sms-min-sc'
8713          The minimum value of stage count that swing modulo scheduler
8714          generates.  The default value is 2.
8715
8716     'max-last-value-rtl'
8717          The maximum size measured as number of RTLs that can be
8718          recorded in an expression in combiner for a pseudo register as
8719          last known value of that register.  The default is 10000.
8720
8721     'integer-share-limit'
8722          Small integer constants can use a shared data structure,
8723          reducing the compiler's memory usage and increasing its speed.
8724          This sets the maximum value of a shared integer constant.  The
8725          default value is 256.
8726
8727     'ssp-buffer-size'
8728          The minimum size of buffers (i.e. arrays) that receive stack
8729          smashing protection when '-fstack-protection' is used.
8730
8731     'max-jump-thread-duplication-stmts'
8732          Maximum number of statements allowed in a block that needs to
8733          be duplicated when threading jumps.
8734
8735     'max-fields-for-field-sensitive'
8736          Maximum number of fields in a structure treated in a field
8737          sensitive manner during pointer analysis.  The default is zero
8738          for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'.
8739
8740     'prefetch-latency'
8741          Estimate on average number of instructions that are executed
8742          before prefetch finishes.  The distance prefetched ahead is
8743          proportional to this constant.  Increasing this number may
8744          also lead to less streams being prefetched (see
8745          'simultaneous-prefetches').
8746
8747     'simultaneous-prefetches'
8748          Maximum number of prefetches that can run at the same time.
8749
8750     'l1-cache-line-size'
8751          The size of cache line in L1 cache, in bytes.
8752
8753     'l1-cache-size'
8754          The size of L1 cache, in kilobytes.
8755
8756     'l2-cache-size'
8757          The size of L2 cache, in kilobytes.
8758
8759     'min-insn-to-prefetch-ratio'
8760          The minimum ratio between the number of instructions and the
8761          number of prefetches to enable prefetching in a loop.
8762
8763     'prefetch-min-insn-to-mem-ratio'
8764          The minimum ratio between the number of instructions and the
8765          number of memory references to enable prefetching in a loop.
8766
8767     'use-canonical-types'
8768          Whether the compiler should use the "canonical" type system.
8769          By default, this should always be 1, which uses a more
8770          efficient internal mechanism for comparing types in C++ and
8771          Objective-C++.  However, if bugs in the canonical type system
8772          are causing compilation failures, set this value to 0 to
8773          disable canonical types.
8774
8775     'switch-conversion-max-branch-ratio'
8776          Switch initialization conversion refuses to create arrays that
8777          are bigger than 'switch-conversion-max-branch-ratio' times the
8778          number of branches in the switch.
8779
8780     'max-partial-antic-length'
8781          Maximum length of the partial antic set computed during the
8782          tree partial redundancy elimination optimization
8783          ('-ftree-pre') when optimizing at '-O3' and above.  For some
8784          sorts of source code the enhanced partial redundancy
8785          elimination optimization can run away, consuming all of the
8786          memory available on the host machine.  This parameter sets a
8787          limit on the length of the sets that are computed, which
8788          prevents the runaway behavior.  Setting a value of 0 for this
8789          parameter allows an unlimited set length.
8790
8791     'sccvn-max-scc-size'
8792          Maximum size of a strongly connected component (SCC) during
8793          SCCVN processing.  If this limit is hit, SCCVN processing for
8794          the whole function is not done and optimizations depending on
8795          it are disabled.  The default maximum SCC size is 10000.
8796
8797     'sccvn-max-alias-queries-per-access'
8798          Maximum number of alias-oracle queries we perform when looking
8799          for redundancies for loads and stores.  If this limit is hit
8800          the search is aborted and the load or store is not considered
8801          redundant.  The number of queries is algorithmically limited
8802          to the number of stores on all paths from the load to the
8803          function entry.  The default maxmimum number of queries is
8804          1000.
8805
8806     'ira-max-loops-num'
8807          IRA uses regional register allocation by default.  If a
8808          function contains more loops than the number given by this
8809          parameter, only at most the given number of the most
8810          frequently-executed loops form regions for regional register
8811          allocation.  The default value of the parameter is 100.
8812
8813     'ira-max-conflict-table-size'
8814          Although IRA uses a sophisticated algorithm to compress the
8815          conflict table, the table can still require excessive amounts
8816          of memory for huge functions.  If the conflict table for a
8817          function could be more than the size in MB given by this
8818          parameter, the register allocator instead uses a faster,
8819          simpler, and lower-quality algorithm that does not require
8820          building a pseudo-register conflict table.  The default value
8821          of the parameter is 2000.
8822
8823     'ira-loop-reserved-regs'
8824          IRA can be used to evaluate more accurate register pressure in
8825          loops for decisions to move loop invariants (see '-O3').  The
8826          number of available registers reserved for some other purposes
8827          is given by this parameter.  The default value of the
8828          parameter is 2, which is the minimal number of registers
8829          needed by typical instructions.  This value is the best found
8830          from numerous experiments.
8831
8832     'loop-invariant-max-bbs-in-loop'
8833          Loop invariant motion can be very expensive, both in
8834          compilation time and in amount of needed compile-time memory,
8835          with very large loops.  Loops with more basic blocks than this
8836          parameter won't have loop invariant motion optimization
8837          performed on them.  The default value of the parameter is 1000
8838          for '-O1' and 10000 for '-O2' and above.
8839
8840     'loop-max-datarefs-for-datadeps'
8841          Building data dapendencies is expensive for very large loops.
8842          This parameter limits the number of data references in loops
8843          that are considered for data dependence analysis.  These large
8844          loops are no handled by the optimizations using loop data
8845          dependencies.  The default value is 1000.
8846
8847     'max-vartrack-size'
8848          Sets a maximum number of hash table slots to use during
8849          variable tracking dataflow analysis of any function.  If this
8850          limit is exceeded with variable tracking at assignments
8851          enabled, analysis for that function is retried without it,
8852          after removing all debug insns from the function.  If the
8853          limit is exceeded even without debug insns, var tracking
8854          analysis is completely disabled for the function.  Setting the
8855          parameter to zero makes it unlimited.
8856
8857     'max-vartrack-expr-depth'
8858          Sets a maximum number of recursion levels when attempting to
8859          map variable names or debug temporaries to value expressions.
8860          This trades compilation time for more complete debug
8861          information.  If this is set too low, value expressions that
8862          are available and could be represented in debug information
8863          may end up not being used; setting this higher may enable the
8864          compiler to find more complex debug expressions, but compile
8865          time and memory use may grow.  The default is 12.
8866
8867     'min-nondebug-insn-uid'
8868          Use uids starting at this parameter for nondebug insns.  The
8869          range below the parameter is reserved exclusively for debug
8870          insns created by '-fvar-tracking-assignments', but debug insns
8871          may get (non-overlapping) uids above it if the reserved range
8872          is exhausted.
8873
8874     'ipa-sra-ptr-growth-factor'
8875          IPA-SRA replaces a pointer to an aggregate with one or more
8876          new parameters only when their cumulative size is less or
8877          equal to 'ipa-sra-ptr-growth-factor' times the size of the
8878          original pointer parameter.
8879
8880     'tm-max-aggregate-size'
8881          When making copies of thread-local variables in a transaction,
8882          this parameter specifies the size in bytes after which
8883          variables are saved with the logging functions as opposed to
8884          save/restore code sequence pairs.  This option only applies
8885          when using '-fgnu-tm'.
8886
8887     'graphite-max-nb-scop-params'
8888          To avoid exponential effects in the Graphite loop transforms,
8889          the number of parameters in a Static Control Part (SCoP) is
8890          bounded.  The default value is 10 parameters.  A variable
8891          whose value is unknown at compilation time and defined outside
8892          a SCoP is a parameter of the SCoP.
8893
8894     'graphite-max-bbs-per-function'
8895          To avoid exponential effects in the detection of SCoPs, the
8896          size of the functions analyzed by Graphite is bounded.  The
8897          default value is 100 basic blocks.
8898
8899     'loop-block-tile-size'
8900          Loop blocking or strip mining transforms, enabled with
8901          '-floop-block' or '-floop-strip-mine', strip mine each loop in
8902          the loop nest by a given number of iterations.  The strip
8903          length can be changed using the 'loop-block-tile-size'
8904          parameter.  The default value is 51 iterations.
8905
8906     'ipa-cp-value-list-size'
8907          IPA-CP attempts to track all possible values and types passed
8908          to a function's parameter in order to propagate them and
8909          perform devirtualization.  'ipa-cp-value-list-size' is the
8910          maximum number of values and types it stores per one formal
8911          parameter of a function.
8912
8913     'lto-partitions'
8914          Specify desired number of partitions produced during WHOPR
8915          compilation.  The number of partitions should exceed the
8916          number of CPUs used for compilation.  The default value is 32.
8917
8918     'lto-minpartition'
8919          Size of minimal partition for WHOPR (in estimated
8920          instructions).  This prevents expenses of splitting very small
8921          programs into too many partitions.
8922
8923     'cxx-max-namespaces-for-diagnostic-help'
8924          The maximum number of namespaces to consult for suggestions
8925          when C++ name lookup fails for an identifier.  The default is
8926          1000.
8927
8928     'sink-frequency-threshold'
8929          The maximum relative execution frequency (in percents) of the
8930          target block relative to a statement's original block to allow
8931          statement sinking of a statement.  Larger numbers result in
8932          more aggressive statement sinking.  The default value is 75.
8933          A small positive adjustment is applied for statements with
8934          memory operands as those are even more profitable so sink.
8935
8936     'max-stores-to-sink'
8937          The maximum number of conditional stores paires that can be
8938          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
8939          or if-conversion ('-ftree-loop-if-convert') is disabled.  The
8940          default is 2.
8941
8942     'allow-load-data-races'
8943          Allow optimizers to introduce new data races on loads.  Set to
8944          1 to allow, otherwise to 0.  This option is enabled by default
8945          unless implicitly set by the '-fmemory-model=' option.
8946
8947     'allow-store-data-races'
8948          Allow optimizers to introduce new data races on stores.  Set
8949          to 1 to allow, otherwise to 0.  This option is enabled by
8950          default unless implicitly set by the '-fmemory-model=' option.
8951
8952     'allow-packed-load-data-races'
8953          Allow optimizers to introduce new data races on packed data
8954          loads.  Set to 1 to allow, otherwise to 0.  This option is
8955          enabled by default unless implicitly set by the
8956          '-fmemory-model=' option.
8957
8958     'allow-packed-store-data-races'
8959          Allow optimizers to introduce new data races on packed data
8960          stores.  Set to 1 to allow, otherwise to 0.  This option is
8961          enabled by default unless implicitly set by the
8962          '-fmemory-model=' option.
8963
8964     'case-values-threshold'
8965          The smallest number of different values for which it is best
8966          to use a jump-table instead of a tree of conditional branches.
8967          If the value is 0, use the default for the machine.  The
8968          default is 0.
8969
8970     'tree-reassoc-width'
8971          Set the maximum number of instructions executed in parallel in
8972          reassociated tree.  This parameter overrides target dependent
8973          heuristics used by default if has non zero value.
8974
8975     'sched-pressure-algorithm'
8976          Choose between the two available implementations of
8977          '-fsched-pressure'.  Algorithm 1 is the original
8978          implementation and is the more likely to prevent instructions
8979          from being reordered.  Algorithm 2 was designed to be a
8980          compromise between the relatively conservative approach taken
8981          by algorithm 1 and the rather aggressive approach taken by the
8982          default scheduler.  It relies more heavily on having a regular
8983          register file and accurate register pressure classes.  See
8984          'haifa-sched.c' in the GCC sources for more details.
8985
8986          The default choice depends on the target.
8987
8988     'max-slsr-cand-scan'
8989          Set the maximum number of existing candidates that will be
8990          considered when seeking a basis for a new straight-line
8991          strength reduction candidate.
8992
8993
8994File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
8995
89963.11 Options Controlling the Preprocessor
8997=========================================
8998
8999These options control the C preprocessor, which is run on each C source
9000file before actual compilation.
9001
9002 If you use the '-E' option, nothing is done except preprocessing.  Some
9003of these options make sense only together with '-E' because they cause
9004the preprocessor output to be unsuitable for actual compilation.
9005
9006'-Wp,OPTION'
9007     You can use '-Wp,OPTION' to bypass the compiler driver and pass
9008     OPTION directly through to the preprocessor.  If OPTION contains
9009     commas, it is split into multiple options at the commas.  However,
9010     many options are modified, translated or interpreted by the
9011     compiler driver before being passed to the preprocessor, and '-Wp'
9012     forcibly bypasses this phase.  The preprocessor's direct interface
9013     is undocumented and subject to change, so whenever possible you
9014     should avoid using '-Wp' and let the driver handle the options
9015     instead.
9016
9017'-Xpreprocessor OPTION'
9018     Pass OPTION as an option to the preprocessor.  You can use this to
9019     supply system-specific preprocessor options that GCC does not
9020     recognize.
9021
9022     If you want to pass an option that takes an argument, you must use
9023     '-Xpreprocessor' twice, once for the option and once for the
9024     argument.
9025
9026'-no-integrated-cpp'
9027     Perform preprocessing as a separate pass before compilation.  By
9028     default, GCC performs preprocessing as an integrated part of input
9029     tokenization and parsing.  If this option is provided, the
9030     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
9031     C, C++, and Objective-C, respectively) is instead invoked twice,
9032     once for preprocessing only and once for actual compilation of the
9033     preprocessed input.  This option may be useful in conjunction with
9034     the '-B' or '-wrapper' options to specify an alternate preprocessor
9035     or perform additional processing of the program source between
9036     normal preprocessing and compilation.
9037
9038'-D NAME'
9039     Predefine NAME as a macro, with definition '1'.
9040
9041'-D NAME=DEFINITION'
9042     The contents of DEFINITION are tokenized and processed as if they
9043     appeared during translation phase three in a '#define' directive.
9044     In particular, the definition will be truncated by embedded newline
9045     characters.
9046
9047     If you are invoking the preprocessor from a shell or shell-like
9048     program you may need to use the shell's quoting syntax to protect
9049     characters such as spaces that have a meaning in the shell syntax.
9050
9051     If you wish to define a function-like macro on the command line,
9052     write its argument list with surrounding parentheses before the
9053     equals sign (if any).  Parentheses are meaningful to most shells,
9054     so you will need to quote the option.  With 'sh' and 'csh',
9055     '-D'NAME(ARGS...)=DEFINITION'' works.
9056
9057     '-D' and '-U' options are processed in the order they are given on
9058     the command line.  All '-imacros FILE' and '-include FILE' options
9059     are processed after all '-D' and '-U' options.
9060
9061'-U NAME'
9062     Cancel any previous definition of NAME, either built in or provided
9063     with a '-D' option.
9064
9065'-undef'
9066     Do not predefine any system-specific or GCC-specific macros.  The
9067     standard predefined macros remain defined.
9068
9069'-I DIR'
9070     Add the directory DIR to the list of directories to be searched for
9071     header files.  Directories named by '-I' are searched before the
9072     standard system include directories.  If the directory DIR is a
9073     standard system include directory, the option is ignored to ensure
9074     that the default search order for system directories and the
9075     special treatment of system headers are not defeated .  If DIR
9076     begins with '=', then the '=' will be replaced by the sysroot
9077     prefix; see '--sysroot' and '-isysroot'.
9078
9079'-o FILE'
9080     Write output to FILE.  This is the same as specifying FILE as the
9081     second non-option argument to 'cpp'.  'gcc' has a different
9082     interpretation of a second non-option argument, so you must use
9083     '-o' to specify the output file.
9084
9085'-Wall'
9086     Turns on all optional warnings which are desirable for normal code.
9087     At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a
9088     warning about integer promotion causing a change of sign in '#if'
9089     expressions.  Note that many of the preprocessor's warnings are on
9090     by default and have no options to control them.
9091
9092'-Wcomment'
9093'-Wcomments'
9094     Warn whenever a comment-start sequence '/*' appears in a '/*'
9095     comment, or whenever a backslash-newline appears in a '//' comment.
9096     (Both forms have the same effect.)
9097
9098'-Wtrigraphs'
9099     Most trigraphs in comments cannot affect the meaning of the
9100     program.  However, a trigraph that would form an escaped newline
9101     ('??/' at the end of a line) can, by changing where the comment
9102     begins or ends.  Therefore, only trigraphs that would form escaped
9103     newlines produce warnings inside a comment.
9104
9105     This option is implied by '-Wall'.  If '-Wall' is not given, this
9106     option is still enabled unless trigraphs are enabled.  To get
9107     trigraph conversion without warnings, but get the other '-Wall'
9108     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
9109
9110'-Wtraditional'
9111     Warn about certain constructs that behave differently in
9112     traditional and ISO C.  Also warn about ISO C constructs that have
9113     no traditional C equivalent, and problematic constructs which
9114     should be avoided.
9115
9116'-Wundef'
9117     Warn whenever an identifier which is not a macro is encountered in
9118     an '#if' directive, outside of 'defined'.  Such identifiers are
9119     replaced with zero.
9120
9121'-Wunused-macros'
9122     Warn about macros defined in the main file that are unused.  A
9123     macro is "used" if it is expanded or tested for existence at least
9124     once.  The preprocessor will also warn if the macro has not been
9125     used at the time it is redefined or undefined.
9126
9127     Built-in macros, macros defined on the command line, and macros
9128     defined in include files are not warned about.
9129
9130     _Note:_ If a macro is actually used, but only used in skipped
9131     conditional blocks, then CPP will report it as unused.  To avoid
9132     the warning in such a case, you might improve the scope of the
9133     macro's definition by, for example, moving it into the first
9134     skipped block.  Alternatively, you could provide a dummy use with
9135     something like:
9136
9137          #if defined the_macro_causing_the_warning
9138          #endif
9139
9140'-Wendif-labels'
9141     Warn whenever an '#else' or an '#endif' are followed by text.  This
9142     usually happens in code of the form
9143
9144          #if FOO
9145          ...
9146          #else FOO
9147          ...
9148          #endif FOO
9149
9150     The second and third 'FOO' should be in comments, but often are not
9151     in older programs.  This warning is on by default.
9152
9153'-Werror'
9154     Make all warnings into hard errors.  Source code which triggers
9155     warnings will be rejected.
9156
9157'-Wsystem-headers'
9158     Issue warnings for code in system headers.  These are normally
9159     unhelpful in finding bugs in your own code, therefore suppressed.
9160     If you are responsible for the system library, you may want to see
9161     them.
9162
9163'-w'
9164     Suppress all warnings, including those which GNU CPP issues by
9165     default.
9166
9167'-pedantic'
9168     Issue all the mandatory diagnostics listed in the C standard.  Some
9169     of them are left out by default, since they trigger frequently on
9170     harmless code.
9171
9172'-pedantic-errors'
9173     Issue all the mandatory diagnostics, and make all mandatory
9174     diagnostics into errors.  This includes mandatory diagnostics that
9175     GCC issues without '-pedantic' but treats as warnings.
9176
9177'-M'
9178     Instead of outputting the result of preprocessing, output a rule
9179     suitable for 'make' describing the dependencies of the main source
9180     file.  The preprocessor outputs one 'make' rule containing the
9181     object file name for that source file, a colon, and the names of
9182     all the included files, including those coming from '-include' or
9183     '-imacros' command line options.
9184
9185     Unless specified explicitly (with '-MT' or '-MQ'), the object file
9186     name consists of the name of the source file with any suffix
9187     replaced with object file suffix and with any leading directory
9188     parts removed.  If there are many included files then the rule is
9189     split into several lines using '\'-newline.  The rule has no
9190     commands.
9191
9192     This option does not suppress the preprocessor's debug output, such
9193     as '-dM'.  To avoid mixing such debug output with the dependency
9194     rules you should explicitly specify the dependency output file with
9195     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
9196     (*note Environment Variables::).  Debug output will still be sent
9197     to the regular output stream as normal.
9198
9199     Passing '-M' to the driver implies '-E', and suppresses warnings
9200     with an implicit '-w'.
9201
9202'-MM'
9203     Like '-M' but do not mention header files that are found in system
9204     header directories, nor header files that are included, directly or
9205     indirectly, from such a header.
9206
9207     This implies that the choice of angle brackets or double quotes in
9208     an '#include' directive does not in itself determine whether that
9209     header will appear in '-MM' dependency output.  This is a slight
9210     change in semantics from GCC versions 3.0 and earlier.
9211
9212'-MF FILE'
9213     When used with '-M' or '-MM', specifies a file to write the
9214     dependencies to.  If no '-MF' switch is given the preprocessor
9215     sends the rules to the same place it would have sent preprocessed
9216     output.
9217
9218     When used with the driver options '-MD' or '-MMD', '-MF' overrides
9219     the default dependency output file.
9220
9221'-MG'
9222     In conjunction with an option such as '-M' requesting dependency
9223     generation, '-MG' assumes missing header files are generated files
9224     and adds them to the dependency list without raising an error.  The
9225     dependency filename is taken directly from the '#include' directive
9226     without prepending any path.  '-MG' also suppresses preprocessed
9227     output, as a missing header file renders this useless.
9228
9229     This feature is used in automatic updating of makefiles.
9230
9231'-MP'
9232     This option instructs CPP to add a phony target for each dependency
9233     other than the main file, causing each to depend on nothing.  These
9234     dummy rules work around errors 'make' gives if you remove header
9235     files without updating the 'Makefile' to match.
9236
9237     This is typical output:
9238
9239          test.o: test.c test.h
9240
9241          test.h:
9242
9243'-MT TARGET'
9244
9245     Change the target of the rule emitted by dependency generation.  By
9246     default CPP takes the name of the main input file, deletes any
9247     directory components and any file suffix such as '.c', and appends
9248     the platform's usual object suffix.  The result is the target.
9249
9250     An '-MT' option will set the target to be exactly the string you
9251     specify.  If you want multiple targets, you can specify them as a
9252     single argument to '-MT', or use multiple '-MT' options.
9253
9254     For example, '-MT '$(objpfx)foo.o'' might give
9255
9256          $(objpfx)foo.o: foo.c
9257
9258'-MQ TARGET'
9259
9260     Same as '-MT', but it quotes any characters which are special to
9261     Make.  '-MQ '$(objpfx)foo.o'' gives
9262
9263          $$(objpfx)foo.o: foo.c
9264
9265     The default target is automatically quoted, as if it were given
9266     with '-MQ'.
9267
9268'-MD'
9269     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
9270     implied.  The driver determines FILE based on whether an '-o'
9271     option is given.  If it is, the driver uses its argument but with a
9272     suffix of '.d', otherwise it takes the name of the input file,
9273     removes any directory components and suffix, and applies a '.d'
9274     suffix.
9275
9276     If '-MD' is used in conjunction with '-E', any '-o' switch is
9277     understood to specify the dependency output file (*note -MF:
9278     dashMF.), but if used without '-E', each '-o' is understood to
9279     specify a target object file.
9280
9281     Since '-E' is not implied, '-MD' can be used to generate a
9282     dependency output file as a side-effect of the compilation process.
9283
9284'-MMD'
9285     Like '-MD' except mention only user header files, not system header
9286     files.
9287
9288'-fpch-deps'
9289     When using precompiled headers (*note Precompiled Headers::), this
9290     flag will cause the dependency-output flags to also list the files
9291     from the precompiled header's dependencies.  If not specified only
9292     the precompiled header would be listed and not the files that were
9293     used to create it because those files are not consulted when a
9294     precompiled header is used.
9295
9296'-fpch-preprocess'
9297     This option allows use of a precompiled header (*note Precompiled
9298     Headers::) together with '-E'.  It inserts a special '#pragma',
9299     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
9300     place where the precompiled header was found, and its FILENAME.
9301     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
9302     loads the PCH.
9303
9304     This option is off by default, because the resulting preprocessed
9305     output is only really suitable as input to GCC.  It is switched on
9306     by '-save-temps'.
9307
9308     You should not write this '#pragma' in your own code, but it is
9309     safe to edit the filename if the PCH file is available in a
9310     different location.  The filename may be absolute or it may be
9311     relative to GCC's current directory.
9312
9313'-x c'
9314'-x c++'
9315'-x objective-c'
9316'-x assembler-with-cpp'
9317     Specify the source language: C, C++, Objective-C, or assembly.
9318     This has nothing to do with standards conformance or extensions; it
9319     merely selects which base syntax to expect.  If you give none of
9320     these options, cpp will deduce the language from the extension of
9321     the source file: '.c', '.cc', '.m', or '.S'.  Some other common
9322     extensions for C++ and assembly are also recognized.  If cpp does
9323     not recognize the extension, it will treat the file as C; this is
9324     the most generic mode.
9325
9326     _Note:_ Previous versions of cpp accepted a '-lang' option which
9327     selected both the language and the standards conformance level.
9328     This option has been removed, because it conflicts with the '-l'
9329     option.
9330
9331'-std=STANDARD'
9332'-ansi'
9333     Specify the standard to which the code should conform.  Currently
9334     CPP knows about C and C++ standards; others may be added in the
9335     future.
9336
9337     STANDARD may be one of:
9338     'c90'
9339     'c89'
9340     'iso9899:1990'
9341          The ISO C standard from 1990.  'c90' is the customary
9342          shorthand for this version of the standard.
9343
9344          The '-ansi' option is equivalent to '-std=c90'.
9345
9346     'iso9899:199409'
9347          The 1990 C standard, as amended in 1994.
9348
9349     'iso9899:1999'
9350     'c99'
9351     'iso9899:199x'
9352     'c9x'
9353          The revised ISO C standard, published in December 1999.
9354          Before publication, this was known as C9X.
9355
9356     'iso9899:2011'
9357     'c11'
9358     'c1x'
9359          The revised ISO C standard, published in December 2011.
9360          Before publication, this was known as C1X.
9361
9362     'gnu90'
9363     'gnu89'
9364          The 1990 C standard plus GNU extensions.  This is the default.
9365
9366     'gnu99'
9367     'gnu9x'
9368          The 1999 C standard plus GNU extensions.
9369
9370     'gnu11'
9371     'gnu1x'
9372          The 2011 C standard plus GNU extensions.
9373
9374     'c++98'
9375          The 1998 ISO C++ standard plus amendments.
9376
9377     'gnu++98'
9378          The same as '-std=c++98' plus GNU extensions.  This is the
9379          default for C++ code.
9380
9381'-I-'
9382     Split the include path.  Any directories specified with '-I'
9383     options before '-I-' are searched only for headers requested with
9384     '#include "FILE"'; they are not searched for '#include <FILE>'.  If
9385     additional directories are specified with '-I' options after the
9386     '-I-', those directories are searched for all '#include'
9387     directives.
9388
9389     In addition, '-I-' inhibits the use of the directory of the current
9390     file directory as the first search directory for '#include "FILE"'.
9391     This option has been deprecated.
9392
9393'-nostdinc'
9394     Do not search the standard system directories for header files.
9395     Only the directories you have specified with '-I' options (and the
9396     directory of the current file, if appropriate) are searched.
9397
9398'-nostdinc++'
9399     Do not search for header files in the C++-specific standard
9400     directories, but do still search the other standard directories.
9401     (This option is used when building the C++ library.)
9402
9403'-include FILE'
9404     Process FILE as if '#include "file"' appeared as the first line of
9405     the primary source file.  However, the first directory searched for
9406     FILE is the preprocessor's working directory _instead of_ the
9407     directory containing the main source file.  If not found there, it
9408     is searched for in the remainder of the '#include "..."' search
9409     chain as normal.
9410
9411     If multiple '-include' options are given, the files are included in
9412     the order they appear on the command line.
9413
9414'-imacros FILE'
9415     Exactly like '-include', except that any output produced by
9416     scanning FILE is thrown away.  Macros it defines remain defined.
9417     This allows you to acquire all the macros from a header without
9418     also processing its declarations.
9419
9420     All files specified by '-imacros' are processed before all files
9421     specified by '-include'.
9422
9423'-idirafter DIR'
9424     Search DIR for header files, but do it _after_ all directories
9425     specified with '-I' and the standard system directories have been
9426     exhausted.  DIR is treated as a system include directory.  If DIR
9427     begins with '=', then the '=' will be replaced by the sysroot
9428     prefix; see '--sysroot' and '-isysroot'.
9429
9430'-iprefix PREFIX'
9431     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
9432     If the prefix represents a directory, you should include the final
9433     '/'.
9434
9435'-iwithprefix DIR'
9436'-iwithprefixbefore DIR'
9437     Append DIR to the prefix specified previously with '-iprefix', and
9438     add the resulting directory to the include search path.
9439     '-iwithprefixbefore' puts it in the same place '-I' would;
9440     '-iwithprefix' puts it where '-idirafter' would.
9441
9442'-isysroot DIR'
9443     This option is like the '--sysroot' option, but applies only to
9444     header files (except for Darwin targets, where it applies to both
9445     header files and libraries).  See the '--sysroot' option for more
9446     information.
9447
9448'-imultilib DIR'
9449     Use DIR as a subdirectory of the directory containing
9450     target-specific C++ headers.
9451
9452'-isystem DIR'
9453     Search DIR for header files, after all directories specified by
9454     '-I' but before the standard system directories.  Mark it as a
9455     system directory, so that it gets the same special treatment as is
9456     applied to the standard system directories.  If DIR begins with
9457     '=', then the '=' will be replaced by the sysroot prefix; see
9458     '--sysroot' and '-isysroot'.
9459
9460'-iquote DIR'
9461     Search DIR only for header files requested with '#include "FILE"';
9462     they are not searched for '#include <FILE>', before all directories
9463     specified by '-I' and before the standard system directories.  If
9464     DIR begins with '=', then the '=' will be replaced by the sysroot
9465     prefix; see '--sysroot' and '-isysroot'.
9466
9467'-fdirectives-only'
9468     When preprocessing, handle directives, but do not expand macros.
9469
9470     The option's behavior depends on the '-E' and '-fpreprocessed'
9471     options.
9472
9473     With '-E', preprocessing is limited to the handling of directives
9474     such as '#define', '#ifdef', and '#error'.  Other preprocessor
9475     operations, such as macro expansion and trigraph conversion are not
9476     performed.  In addition, the '-dD' option is implicitly enabled.
9477
9478     With '-fpreprocessed', predefinition of command line and most
9479     builtin macros is disabled.  Macros such as '__LINE__', which are
9480     contextually dependent, are handled normally.  This enables
9481     compilation of files previously preprocessed with '-E
9482     -fdirectives-only'.
9483
9484     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
9485     take precedence.  This enables full preprocessing of files
9486     previously preprocessed with '-E -fdirectives-only'.
9487
9488'-fdollars-in-identifiers'
9489     Accept '$' in identifiers.
9490
9491'-fextended-identifiers'
9492     Accept universal character names in identifiers.  This option is
9493     experimental; in a future version of GCC, it will be enabled by
9494     default for C99 and C++.
9495
9496'-fno-canonical-system-headers'
9497     When preprocessing, do not shorten system header paths with
9498     canonicalization.
9499
9500'-fpreprocessed'
9501     Indicate to the preprocessor that the input file has already been
9502     preprocessed.  This suppresses things like macro expansion,
9503     trigraph conversion, escaped newline splicing, and processing of
9504     most directives.  The preprocessor still recognizes and removes
9505     comments, so that you can pass a file preprocessed with '-C' to the
9506     compiler without problems.  In this mode the integrated
9507     preprocessor is little more than a tokenizer for the front ends.
9508
9509     '-fpreprocessed' is implicit if the input file has one of the
9510     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
9511     uses for preprocessed files created by '-save-temps'.
9512
9513'-ftabstop=WIDTH'
9514     Set the distance between tab stops.  This helps the preprocessor
9515     report correct column numbers in warnings or errors, even if tabs
9516     appear on the line.  If the value is less than 1 or greater than
9517     100, the option is ignored.  The default is 8.
9518
9519'-fdebug-cpp'
9520     This option is only useful for debugging GCC. When used with '-E',
9521     dumps debugging information about location maps.  Every token in
9522     the output is preceded by the dump of the map its location belongs
9523     to.  The dump of the map holding the location of a token would be:
9524          {'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}
9525
9526     When used without '-E', this option has no effect.
9527
9528'-ftrack-macro-expansion[=LEVEL]'
9529     Track locations of tokens across macro expansions.  This allows the
9530     compiler to emit diagnostic about the current macro expansion stack
9531     when a compilation error occurs in a macro expansion.  Using this
9532     option makes the preprocessor and the compiler consume more memory.
9533     The LEVEL parameter can be used to choose the level of precision of
9534     token location tracking thus decreasing the memory consumption if
9535     necessary.  Value '0' of LEVEL de-activates this option just as if
9536     no '-ftrack-macro-expansion' was present on the command line.
9537     Value '1' tracks tokens locations in a degraded mode for the sake
9538     of minimal memory overhead.  In this mode all tokens resulting from
9539     the expansion of an argument of a function-like macro have the same
9540     location.  Value '2' tracks tokens locations completely.  This
9541     value is the most memory hungry.  When this option is given no
9542     argument, the default parameter value is '2'.
9543
9544     Note that -ftrack-macro-expansion=2 is activated by default.
9545
9546'-fexec-charset=CHARSET'
9547     Set the execution character set, used for string and character
9548     constants.  The default is UTF-8.  CHARSET can be any encoding
9549     supported by the system's 'iconv' library routine.
9550
9551'-fwide-exec-charset=CHARSET'
9552     Set the wide execution character set, used for wide string and
9553     character constants.  The default is UTF-32 or UTF-16, whichever
9554     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
9555     CHARSET can be any encoding supported by the system's 'iconv'
9556     library routine; however, you will have problems with encodings
9557     that do not fit exactly in 'wchar_t'.
9558
9559'-finput-charset=CHARSET'
9560     Set the input character set, used for translation from the
9561     character set of the input file to the source character set used by
9562     GCC.  If the locale does not specify, or GCC cannot get this
9563     information from the locale, the default is UTF-8.  This can be
9564     overridden by either the locale or this command line option.
9565     Currently the command line option takes precedence if there's a
9566     conflict.  CHARSET can be any encoding supported by the system's
9567     'iconv' library routine.
9568
9569'-fworking-directory'
9570     Enable generation of linemarkers in the preprocessor output that
9571     will let the compiler know the current working directory at the
9572     time of preprocessing.  When this option is enabled, the
9573     preprocessor will emit, after the initial linemarker, a second
9574     linemarker with the current working directory followed by two
9575     slashes.  GCC will use this directory, when it's present in the
9576     preprocessed input, as the directory emitted as the current working
9577     directory in some debugging information formats.  This option is
9578     implicitly enabled if debugging information is enabled, but this
9579     can be inhibited with the negated form '-fno-working-directory'.
9580     If the '-P' flag is present in the command line, this option has no
9581     effect, since no '#line' directives are emitted whatsoever.
9582
9583'-fno-show-column'
9584     Do not print column numbers in diagnostics.  This may be necessary
9585     if diagnostics are being scanned by a program that does not
9586     understand the column numbers, such as 'dejagnu'.
9587
9588'-A PREDICATE=ANSWER'
9589     Make an assertion with the predicate PREDICATE and answer ANSWER.
9590     This form is preferred to the older form '-A PREDICATE(ANSWER)',
9591     which is still supported, because it does not use shell special
9592     characters.
9593
9594'-A -PREDICATE=ANSWER'
9595     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
9596
9597'-dCHARS'
9598     CHARS is a sequence of one or more of the following characters, and
9599     must not be preceded by a space.  Other characters are interpreted
9600     by the compiler proper, or reserved for future versions of GCC, and
9601     so are silently ignored.  If you specify characters whose behavior
9602     conflicts, the result is undefined.
9603
9604     'M'
9605          Instead of the normal output, generate a list of '#define'
9606          directives for all the macros defined during the execution of
9607          the preprocessor, including predefined macros.  This gives you
9608          a way of finding out what is predefined in your version of the
9609          preprocessor.  Assuming you have no file 'foo.h', the command
9610
9611               touch foo.h; cpp -dM foo.h
9612
9613          will show all the predefined macros.
9614
9615          If you use '-dM' without the '-E' option, '-dM' is interpreted
9616          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Debugging
9617          Options::.
9618
9619     'D'
9620          Like 'M' except in two respects: it does _not_ include the
9621          predefined macros, and it outputs _both_ the '#define'
9622          directives and the result of preprocessing.  Both kinds of
9623          output go to the standard output file.
9624
9625     'N'
9626          Like 'D', but emit only the macro names, not their expansions.
9627
9628     'I'
9629          Output '#include' directives in addition to the result of
9630          preprocessing.
9631
9632     'U'
9633          Like 'D' except that only macros that are expanded, or whose
9634          definedness is tested in preprocessor directives, are output;
9635          the output is delayed until the use or test of the macro; and
9636          '#undef' directives are also output for macros tested but
9637          undefined at the time.
9638
9639'-P'
9640     Inhibit generation of linemarkers in the output from the
9641     preprocessor.  This might be useful when running the preprocessor
9642     on something that is not C code, and will be sent to a program
9643     which might be confused by the linemarkers.
9644
9645'-C'
9646     Do not discard comments.  All comments are passed through to the
9647     output file, except for comments in processed directives, which are
9648     deleted along with the directive.
9649
9650     You should be prepared for side effects when using '-C'; it causes
9651     the preprocessor to treat comments as tokens in their own right.
9652     For example, comments appearing at the start of what would be a
9653     directive line have the effect of turning that line into an
9654     ordinary source line, since the first token on the line is no
9655     longer a '#'.
9656
9657'-CC'
9658     Do not discard comments, including during macro expansion.  This is
9659     like '-C', except that comments contained within macros are also
9660     passed through to the output file where the macro is expanded.
9661
9662     In addition to the side-effects of the '-C' option, the '-CC'
9663     option causes all C++-style comments inside a macro to be converted
9664     to C-style comments.  This is to prevent later use of that macro
9665     from inadvertently commenting out the remainder of the source line.
9666
9667     The '-CC' option is generally used to support lint comments.
9668
9669'-traditional-cpp'
9670     Try to imitate the behavior of old-fashioned C preprocessors, as
9671     opposed to ISO C preprocessors.
9672
9673'-trigraphs'
9674     Process trigraph sequences.  These are three-character sequences,
9675     all starting with '??', that are defined by ISO C to stand for
9676     single characters.  For example, '??/' stands for '\', so ''??/n''
9677     is a character constant for a newline.  By default, GCC ignores
9678     trigraphs, but in standard-conforming modes it converts them.  See
9679     the '-std' and '-ansi' options.
9680
9681     The nine trigraphs and their replacements are
9682
9683          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
9684          Replacement:      [    ]    {    }    #    \    ^    |    ~
9685
9686'-remap'
9687     Enable special code to work around file systems which only permit
9688     very short file names, such as MS-DOS.
9689
9690'--help'
9691'--target-help'
9692     Print text describing all the command line options instead of
9693     preprocessing anything.
9694
9695'-v'
9696     Verbose mode.  Print out GNU CPP's version number at the beginning
9697     of execution, and report the final form of the include path.
9698
9699'-H'
9700     Print the name of each header file used, in addition to other
9701     normal activities.  Each name is indented to show how deep in the
9702     '#include' stack it is.  Precompiled header files are also printed,
9703     even if they are found to be invalid; an invalid precompiled header
9704     file is printed with '...x' and a valid one with '...!' .
9705
9706'-version'
9707'--version'
9708     Print out GNU CPP's version number.  With one dash, proceed to
9709     preprocess as normal.  With two dashes, exit immediately.
9710
9711
9712File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
9713
97143.12 Passing Options to the Assembler
9715=====================================
9716
9717You can pass options to the assembler.
9718
9719'-Wa,OPTION'
9720     Pass OPTION as an option to the assembler.  If OPTION contains
9721     commas, it is split into multiple options at the commas.
9722
9723'-Xassembler OPTION'
9724     Pass OPTION as an option to the assembler.  You can use this to
9725     supply system-specific assembler options that GCC does not
9726     recognize.
9727
9728     If you want to pass an option that takes an argument, you must use
9729     '-Xassembler' twice, once for the option and once for the argument.
9730
9731
9732File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
9733
97343.13 Options for Linking
9735========================
9736
9737These options come into play when the compiler links object files into
9738an executable output file.  They are meaningless if the compiler is not
9739doing a link step.
9740
9741'OBJECT-FILE-NAME'
9742     A file name that does not end in a special recognized suffix is
9743     considered to name an object file or library.  (Object files are
9744     distinguished from libraries by the linker according to the file
9745     contents.)  If linking is done, these object files are used as
9746     input to the linker.
9747
9748'-c'
9749'-S'
9750'-E'
9751     If any of these options is used, then the linker is not run, and
9752     object file names should not be used as arguments.  *Note Overall
9753     Options::.
9754
9755'-lLIBRARY'
9756'-l LIBRARY'
9757     Search the library named LIBRARY when linking.  (The second
9758     alternative with the library as a separate argument is only for
9759     POSIX compliance and is not recommended.)
9760
9761     It makes a difference where in the command you write this option;
9762     the linker searches and processes libraries and object files in the
9763     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
9764     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
9765     functions in 'z', those functions may not be loaded.
9766
9767     The linker searches a standard list of directories for the library,
9768     which is actually a file named 'libLIBRARY.a'.  The linker then
9769     uses this file as if it had been specified precisely by name.
9770
9771     The directories searched include several standard system
9772     directories plus any that you specify with '-L'.
9773
9774     Normally the files found this way are library files--archive files
9775     whose members are object files.  The linker handles an archive file
9776     by scanning through it for members which define symbols that have
9777     so far been referenced but not defined.  But if the file that is
9778     found is an ordinary object file, it is linked in the usual
9779     fashion.  The only difference between using an '-l' option and
9780     specifying a file name is that '-l' surrounds LIBRARY with 'lib'
9781     and '.a' and searches several directories.
9782
9783'-lobjc'
9784     You need this special case of the '-l' option in order to link an
9785     Objective-C or Objective-C++ program.
9786
9787'-nostartfiles'
9788     Do not use the standard system startup files when linking.  The
9789     standard system libraries are used normally, unless '-nostdlib' or
9790     '-nodefaultlibs' is used.
9791
9792'-nodefaultlibs'
9793     Do not use the standard system libraries when linking.  Only the
9794     libraries you specify are passed to the linker, and options
9795     specifying linkage of the system libraries, such as
9796     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
9797     startup files are used normally, unless '-nostartfiles' is used.
9798
9799     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
9800     'memmove'.  These entries are usually resolved by entries in libc.
9801     These entry points should be supplied through some other mechanism
9802     when this option is specified.
9803
9804'-nostdlib'
9805     Do not use the standard system startup files or libraries when
9806     linking.  No startup files and only the libraries you specify are
9807     passed to the linker, and options specifying linkage of the system
9808     libraries, such as '-static-libgcc' or '-shared-libgcc', are
9809     ignored.
9810
9811     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
9812     'memmove'.  These entries are usually resolved by entries in libc.
9813     These entry points should be supplied through some other mechanism
9814     when this option is specified.
9815
9816     One of the standard libraries bypassed by '-nostdlib' and
9817     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
9818     which GCC uses to overcome shortcomings of particular machines, or
9819     special needs for some languages.  (*Note Interfacing to GCC
9820     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
9821     most cases, you need 'libgcc.a' even when you want to avoid other
9822     standard libraries.  In other words, when you specify '-nostdlib'
9823     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
9824     This ensures that you have no unresolved references to internal GCC
9825     library subroutines.  (An example of such an internal subroutine is
9826     '__main', used to ensure C++ constructors are called; *note
9827     'collect2': (gccint)Collect2.)
9828
9829'-pie'
9830     Produce a position independent executable on targets that support
9831     it.  For predictable results, you must also specify the same set of
9832     options used for compilation ('-fpie', '-fPIE', or model
9833     suboptions) when you specify this linker option.
9834
9835'-rdynamic'
9836     Pass the flag '-export-dynamic' to the ELF linker, on targets that
9837     support it.  This instructs the linker to add all symbols, not only
9838     used ones, to the dynamic symbol table.  This option is needed for
9839     some uses of 'dlopen' or to allow obtaining backtraces from within
9840     a program.
9841
9842'-s'
9843     Remove all symbol table and relocation information from the
9844     executable.
9845
9846'-static'
9847     On systems that support dynamic linking, this prevents linking with
9848     the shared libraries.  On other systems, this option has no effect.
9849
9850'-shared'
9851     Produce a shared object which can then be linked with other objects
9852     to form an executable.  Not all systems support this option.  For
9853     predictable results, you must also specify the same set of options
9854     used for compilation ('-fpic', '-fPIC', or model suboptions) when
9855     you specify this linker option.(1)
9856
9857'-shared-libgcc'
9858'-static-libgcc'
9859     On systems that provide 'libgcc' as a shared library, these options
9860     force the use of either the shared or static version, respectively.
9861     If no shared version of 'libgcc' was built when the compiler was
9862     configured, these options have no effect.
9863
9864     There are several situations in which an application should use the
9865     shared 'libgcc' instead of the static version.  The most common of
9866     these is when the application wishes to throw and catch exceptions
9867     across different shared libraries.  In that case, each of the
9868     libraries as well as the application itself should use the shared
9869     'libgcc'.
9870
9871     Therefore, the G++ and GCJ drivers automatically add
9872     '-shared-libgcc' whenever you build a shared library or a main
9873     executable, because C++ and Java programs typically use exceptions,
9874     so this is the right thing to do.
9875
9876     If, instead, you use the GCC driver to create shared libraries, you
9877     may find that they are not always linked with the shared 'libgcc'.
9878     If GCC finds, at its configuration time, that you have a non-GNU
9879     linker or a GNU linker that does not support option
9880     '--eh-frame-hdr', it links the shared version of 'libgcc' into
9881     shared libraries by default.  Otherwise, it takes advantage of the
9882     linker and optimizes away the linking with the shared version of
9883     'libgcc', linking with the static version of libgcc by default.
9884     This allows exceptions to propagate through such shared libraries,
9885     without incurring relocation costs at library load time.
9886
9887     However, if a library or main executable is supposed to throw or
9888     catch exceptions, you must link it using the G++ or GCJ driver, as
9889     appropriate for the languages used in the program, or using the
9890     option '-shared-libgcc', such that it is linked with the shared
9891     'libgcc'.
9892
9893'-static-libasan'
9894     When the '-fsanitize=address' option is used to link a program, the
9895     GCC driver automatically links against 'libasan'.  If 'libasan' is
9896     available as a shared library, and the '-static' option is not
9897     used, then this links against the shared version of 'libasan'.  The
9898     '-static-libasan' option directs the GCC driver to link 'libasan'
9899     statically, without necessarily linking other libraries statically.
9900
9901'-static-libtsan'
9902     When the '-fsanitize=thread' option is used to link a program, the
9903     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
9904     available as a shared library, and the '-static' option is not
9905     used, then this links against the shared version of 'libtsan'.  The
9906     '-static-libtsan' option directs the GCC driver to link 'libtsan'
9907     statically, without necessarily linking other libraries statically.
9908
9909'-static-libstdc++'
9910     When the 'g++' program is used to link a C++ program, it normally
9911     automatically links against 'libstdc++'.  If 'libstdc++' is
9912     available as a shared library, and the '-static' option is not
9913     used, then this links against the shared version of 'libstdc++'.
9914     That is normally fine.  However, it is sometimes useful to freeze
9915     the version of 'libstdc++' used by the program without going all
9916     the way to a fully static link.  The '-static-libstdc++' option
9917     directs the 'g++' driver to link 'libstdc++' statically, without
9918     necessarily linking other libraries statically.
9919
9920'-symbolic'
9921     Bind references to global symbols when building a shared object.
9922     Warn about any unresolved references (unless overridden by the link
9923     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
9924     support this option.
9925
9926'-T SCRIPT'
9927     Use SCRIPT as the linker script.  This option is supported by most
9928     systems using the GNU linker.  On some targets, such as bare-board
9929     targets without an operating system, the '-T' option may be
9930     required when linking to avoid references to undefined symbols.
9931
9932'-Xlinker OPTION'
9933     Pass OPTION as an option to the linker.  You can use this to supply
9934     system-specific linker options that GCC does not recognize.
9935
9936     If you want to pass an option that takes a separate argument, you
9937     must use '-Xlinker' twice, once for the option and once for the
9938     argument.  For example, to pass '-assert definitions', you must
9939     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
9940     write '-Xlinker "-assert definitions"', because this passes the
9941     entire string as a single argument, which is not what the linker
9942     expects.
9943
9944     When using the GNU linker, it is usually more convenient to pass
9945     arguments to linker options using the 'OPTION=VALUE' syntax than as
9946     separate arguments.  For example, you can specify '-Xlinker
9947     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
9948     Other linkers may not support this syntax for command-line options.
9949
9950'-Wl,OPTION'
9951     Pass OPTION as an option to the linker.  If OPTION contains commas,
9952     it is split into multiple options at the commas.  You can use this
9953     syntax to pass an argument to the option.  For example,
9954     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
9955     using the GNU linker, you can also get the same effect with
9956     '-Wl,-Map=output.map'.
9957
9958'-u SYMBOL'
9959     Pretend the symbol SYMBOL is undefined, to force linking of library
9960     modules to define it.  You can use '-u' multiple times with
9961     different symbols to force loading of additional library modules.
9962
9963   ---------- Footnotes ----------
9964
9965   (1) On some systems, 'gcc -shared' needs to build supplementary stub
9966code for constructors to work.  On multi-libbed systems, 'gcc -shared'
9967must select the correct support libraries to link against.  Failing to
9968supply the correct flags may lead to subtle defects.  Supplying them in
9969cases where they are not necessary is innocuous.
9970
9971
9972File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
9973
99743.14 Options for Directory Search
9975=================================
9976
9977These options specify directories to search for header files, for
9978libraries and for parts of the compiler:
9979
9980'-IDIR'
9981     Add the directory DIR to the head of the list of directories to be
9982     searched for header files.  This can be used to override a system
9983     header file, substituting your own version, since these directories
9984     are searched before the system header file directories.  However,
9985     you should not use this option to add directories that contain
9986     vendor-supplied system header files (use '-isystem' for that).  If
9987     you use more than one '-I' option, the directories are scanned in
9988     left-to-right order; the standard system directories come after.
9989
9990     If a standard system include directory, or a directory specified
9991     with '-isystem', is also specified with '-I', the '-I' option is
9992     ignored.  The directory is still searched but as a system directory
9993     at its normal position in the system include chain.  This is to
9994     ensure that GCC's procedure to fix buggy system headers and the
9995     ordering for the 'include_next' directive are not inadvertently
9996     changed.  If you really need to change the search order for system
9997     directories, use the '-nostdinc' and/or '-isystem' options.
9998
9999'-iplugindir=DIR'
10000     Set the directory to search for plugins that are passed by
10001     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
10002     not meant to be used by the user, but only passed by the driver.
10003
10004'-iquoteDIR'
10005     Add the directory DIR to the head of the list of directories to be
10006     searched for header files only for the case of '#include "FILE"';
10007     they are not searched for '#include <FILE>', otherwise just like
10008     '-I'.
10009
10010'-LDIR'
10011     Add directory DIR to the list of directories to be searched for
10012     '-l'.
10013
10014'-BPREFIX'
10015     This option specifies where to find the executables, libraries,
10016     include files, and data files of the compiler itself.
10017
10018     The compiler driver program runs one or more of the subprograms
10019     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
10020     program it tries to run, both with and without 'MACHINE/VERSION/'
10021     (*note Target Options::).
10022
10023     For each subprogram to be run, the compiler driver first tries the
10024     '-B' prefix, if any.  If that name is not found, or if '-B' is not
10025     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
10026     and '/usr/local/lib/gcc/'.  If neither of those results in a file
10027     name that is found, the unmodified program name is searched for
10028     using the directories specified in your 'PATH' environment
10029     variable.
10030
10031     The compiler checks to see if the path provided by the '-B' refers
10032     to a directory, and if necessary it adds a directory separator
10033     character at the end of the path.
10034
10035     '-B' prefixes that effectively specify directory names also apply
10036     to libraries in the linker, because the compiler translates these
10037     options into '-L' options for the linker.  They also apply to
10038     includes files in the preprocessor, because the compiler translates
10039     these options into '-isystem' options for the preprocessor.  In
10040     this case, the compiler appends 'include' to the prefix.
10041
10042     The runtime support file 'libgcc.a' can also be searched for using
10043     the '-B' prefix, if needed.  If it is not found there, the two
10044     standard prefixes above are tried, and that is all.  The file is
10045     left out of the link if it is not found by those means.
10046
10047     Another way to specify a prefix much like the '-B' prefix is to use
10048     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
10049     Variables::.
10050
10051     As a special kludge, if the path provided by '-B' is
10052     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
10053     is replaced by '[dir/]include'.  This is to help with
10054     boot-strapping the compiler.
10055
10056'-specs=FILE'
10057     Process FILE after the compiler reads in the standard 'specs' file,
10058     in order to override the defaults which the 'gcc' driver program
10059     uses when determining what switches to pass to 'cc1', 'cc1plus',
10060     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
10061     the command line, and they are processed in order, from left to
10062     right.
10063
10064'--sysroot=DIR'
10065     Use DIR as the logical root directory for headers and libraries.
10066     For example, if the compiler normally searches for headers in
10067     '/usr/include' and libraries in '/usr/lib', it instead searches
10068     'DIR/usr/include' and 'DIR/usr/lib'.
10069
10070     If you use both this option and the '-isysroot' option, then the
10071     '--sysroot' option applies to libraries, but the '-isysroot' option
10072     applies to header files.
10073
10074     The GNU linker (beginning with version 2.16) has the necessary
10075     support for this option.  If your linker does not support this
10076     option, the header file aspect of '--sysroot' still works, but the
10077     library aspect does not.
10078
10079'--no-sysroot-suffix'
10080     For some targets, a suffix is added to the root directory specified
10081     with '--sysroot', depending on the other options used, so that
10082     headers may for example be found in 'DIR/SUFFIX/usr/include'
10083     instead of 'DIR/usr/include'.  This option disables the addition of
10084     such a suffix.
10085
10086'-I-'
10087     This option has been deprecated.  Please use '-iquote' instead for
10088     '-I' directories before the '-I-' and remove the '-I-'.  Any
10089     directories you specify with '-I' options before the '-I-' option
10090     are searched only for the case of '#include "FILE"'; they are not
10091     searched for '#include <FILE>'.
10092
10093     If additional directories are specified with '-I' options after the
10094     '-I-', these directories are searched for all '#include'
10095     directives.  (Ordinarily _all_ '-I' directories are used this way.)
10096
10097     In addition, the '-I-' option inhibits the use of the current
10098     directory (where the current input file came from) as the first
10099     search directory for '#include "FILE"'.  There is no way to
10100     override this effect of '-I-'.  With '-I.' you can specify
10101     searching the directory that is current when the compiler is
10102     invoked.  That is not exactly the same as what the preprocessor
10103     does by default, but it is often satisfactory.
10104
10105     '-I-' does not inhibit the use of the standard system directories
10106     for header files.  Thus, '-I-' and '-nostdinc' are independent.
10107
10108
10109File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
10110
101113.15 Specifying subprocesses and the switches to pass to them
10112=============================================================
10113
10114'gcc' is a driver program.  It performs its job by invoking a sequence
10115of other programs to do the work of compiling, assembling and linking.
10116GCC interprets its command-line parameters and uses these to deduce
10117which programs it should invoke, and which command-line options it ought
10118to place on their command lines.  This behavior is controlled by "spec
10119strings".  In most cases there is one spec string for each program that
10120GCC can invoke, but a few programs have multiple spec strings to control
10121their behavior.  The spec strings built into GCC can be overridden by
10122using the '-specs=' command-line switch to specify a spec file.
10123
10124 "Spec files" are plaintext files that are used to construct spec
10125strings.  They consist of a sequence of directives separated by blank
10126lines.  The type of directive is determined by the first non-whitespace
10127character on the line, which can be one of the following:
10128
10129'%COMMAND'
10130     Issues a COMMAND to the spec file processor.  The commands that can
10131     appear here are:
10132
10133     '%include <FILE>'
10134          Search for FILE and insert its text at the current point in
10135          the specs file.
10136
10137     '%include_noerr <FILE>'
10138          Just like '%include', but do not generate an error message if
10139          the include file cannot be found.
10140
10141     '%rename OLD_NAME NEW_NAME'
10142          Rename the spec string OLD_NAME to NEW_NAME.
10143
10144'*[SPEC_NAME]:'
10145     This tells the compiler to create, override or delete the named
10146     spec string.  All lines after this directive up to the next
10147     directive or blank line are considered to be the text for the spec
10148     string.  If this results in an empty string then the spec is
10149     deleted.  (Or, if the spec did not exist, then nothing happens.)
10150     Otherwise, if the spec does not currently exist a new spec is
10151     created.  If the spec does exist then its contents are overridden
10152     by the text of this directive, unless the first character of that
10153     text is the '+' character, in which case the text is appended to
10154     the spec.
10155
10156'[SUFFIX]:'
10157     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
10158     and up to the next directive or blank line are considered to make
10159     up the spec string for the indicated suffix.  When the compiler
10160     encounters an input file with the named suffix, it processes the
10161     spec string in order to work out how to compile that file.  For
10162     example:
10163
10164          .ZZ:
10165          z-compile -input %i
10166
10167     This says that any input file whose name ends in '.ZZ' should be
10168     passed to the program 'z-compile', which should be invoked with the
10169     command-line switch '-input' and with the result of performing the
10170     '%i' substitution.  (See below.)
10171
10172     As an alternative to providing a spec string, the text following a
10173     suffix directive can be one of the following:
10174
10175     '@LANGUAGE'
10176          This says that the suffix is an alias for a known LANGUAGE.
10177          This is similar to using the '-x' command-line switch to GCC
10178          to specify a language explicitly.  For example:
10179
10180               .ZZ:
10181               @c++
10182
10183          Says that .ZZ files are, in fact, C++ source files.
10184
10185     '#NAME'
10186          This causes an error messages saying:
10187
10188               NAME compiler not installed on this system.
10189
10190     GCC already has an extensive list of suffixes built into it.  This
10191     directive adds an entry to the end of the list of suffixes, but
10192     since the list is searched from the end backwards, it is
10193     effectively possible to override earlier entries using this
10194     technique.
10195
10196 GCC has the following spec strings built into it.  Spec files can
10197override these strings or create their own.  Note that individual
10198targets can also add their own spec strings to this list.
10199
10200     asm          Options to pass to the assembler
10201     asm_final    Options to pass to the assembler post-processor
10202     cpp          Options to pass to the C preprocessor
10203     cc1          Options to pass to the C compiler
10204     cc1plus      Options to pass to the C++ compiler
10205     endfile      Object files to include at the end of the link
10206     link         Options to pass to the linker
10207     lib          Libraries to include on the command line to the linker
10208     libgcc       Decides which GCC support library to pass to the linker
10209     linker       Sets the name of the linker
10210     predefines   Defines to be passed to the C preprocessor
10211     signed_char  Defines to pass to CPP to say whether char is signed
10212                  by default
10213     startfile    Object files to include at the start of the link
10214
10215 Here is a small example of a spec file:
10216
10217     %rename lib                 old_lib
10218
10219     *lib:
10220     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
10221
10222 This example renames the spec called 'lib' to 'old_lib' and then
10223overrides the previous definition of 'lib' with a new one.  The new
10224definition adds in some extra command-line options before including the
10225text of the old definition.
10226
10227 "Spec strings" are a list of command-line options to be passed to their
10228corresponding program.  In addition, the spec strings can contain
10229'%'-prefixed sequences to substitute variable text or to conditionally
10230insert text into the command line.  Using these constructs it is
10231possible to generate quite complex command lines.
10232
10233 Here is a table of all defined '%'-sequences for spec strings.  Note
10234that spaces are not generated automatically around the results of
10235expanding these sequences.  Therefore you can concatenate them together
10236or combine them with constant text in a single argument.
10237
10238'%%'
10239     Substitute one '%' into the program name or argument.
10240
10241'%i'
10242     Substitute the name of the input file being processed.
10243
10244'%b'
10245     Substitute the basename of the input file being processed.  This is
10246     the substring up to (and not including) the last period and not
10247     including the directory.
10248
10249'%B'
10250     This is the same as '%b', but include the file suffix (text after
10251     the last period).
10252
10253'%d'
10254     Marks the argument containing or following the '%d' as a temporary
10255     file name, so that that file is deleted if GCC exits successfully.
10256     Unlike '%g', this contributes no text to the argument.
10257
10258'%gSUFFIX'
10259     Substitute a file name that has suffix SUFFIX and is chosen once
10260     per compilation, and mark the argument in the same way as '%d'.  To
10261     reduce exposure to denial-of-service attacks, the file name is now
10262     chosen in a way that is hard to predict even when previously chosen
10263     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
10264     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
10265     regexp '[.A-Za-z]*' or the special string '%O', which is treated
10266     exactly as if '%O' had been preprocessed.  Previously, '%g' was
10267     simply substituted with a file name chosen once per compilation,
10268     without regard to any appended suffix (which was therefore treated
10269     just like ordinary text), making such attacks more likely to
10270     succeed.
10271
10272'%uSUFFIX'
10273     Like '%g', but generates a new temporary file name each time it
10274     appears instead of once per compilation.
10275
10276'%USUFFIX'
10277     Substitutes the last file name generated with '%uSUFFIX',
10278     generating a new one if there is no such last file name.  In the
10279     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
10280     they don't share the same suffix _space_, so '%g.s ... %U.s ...
10281     %g.s ... %U.s' involves the generation of two distinct file names,
10282     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
10283     was simply substituted with a file name chosen for the previous
10284     '%u', without regard to any appended suffix.
10285
10286'%jSUFFIX'
10287     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
10288     writable, and if '-save-temps' is not used; otherwise, substitute
10289     the name of a temporary file, just like '%u'.  This temporary file
10290     is not meant for communication between processes, but rather as a
10291     junk disposal mechanism.
10292
10293'%|SUFFIX'
10294'%mSUFFIX'
10295     Like '%g', except if '-pipe' is in effect.  In that case '%|'
10296     substitutes a single dash and '%m' substitutes nothing at all.
10297     These are the two most common ways to instruct a program that it
10298     should read from standard input or write to standard output.  If
10299     you need something more elaborate you can use an '%{pipe:'X'}'
10300     construct: see for example 'f/lang-specs.h'.
10301
10302'%.SUFFIX'
10303     Substitutes .SUFFIX for the suffixes of a matched switch's args
10304     when it is subsequently output with '%*'.  SUFFIX is terminated by
10305     the next space or %.
10306
10307'%w'
10308     Marks the argument containing or following the '%w' as the
10309     designated output file of this compilation.  This puts the argument
10310     into the sequence of arguments that '%o' substitutes.
10311
10312'%o'
10313     Substitutes the names of all the output files, with spaces
10314     automatically placed around them.  You should write spaces around
10315     the '%o' as well or the results are undefined.  '%o' is for use in
10316     the specs for running the linker.  Input files whose names have no
10317     recognized suffix are not compiled at all, but they are included
10318     among the output files, so they are linked.
10319
10320'%O'
10321     Substitutes the suffix for object files.  Note that this is handled
10322     specially when it immediately follows '%g, %u, or %U', because of
10323     the need for those to form complete file names.  The handling is
10324     such that '%O' is treated exactly as if it had already been
10325     substituted, except that '%g, %u, and %U' do not currently support
10326     additional SUFFIX characters following '%O' as they do following,
10327     for example, '.o'.
10328
10329'%p'
10330     Substitutes the standard macro predefinitions for the current
10331     target machine.  Use this when running 'cpp'.
10332
10333'%P'
10334     Like '%p', but puts '__' before and after the name of each
10335     predefined macro, except for macros that start with '__' or with
10336     '_L', where L is an uppercase letter.  This is for ISO C.
10337
10338'%I'
10339     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
10340     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
10341     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
10342
10343'%s'
10344     Current argument is the name of a library or startup file of some
10345     sort.  Search for that file in a standard list of directories and
10346     substitute the full name found.  The current working directory is
10347     included in the list of directories scanned.
10348
10349'%T'
10350     Current argument is the name of a linker script.  Search for that
10351     file in the current list of directories to scan for libraries.  If
10352     the file is located insert a '--script' option into the command
10353     line followed by the full path name found.  If the file is not
10354     found then generate an error message.  Note: the current working
10355     directory is not searched.
10356
10357'%eSTR'
10358     Print STR as an error message.  STR is terminated by a newline.
10359     Use this when inconsistent options are detected.
10360
10361'%(NAME)'
10362     Substitute the contents of spec string NAME at this point.
10363
10364'%x{OPTION}'
10365     Accumulate an option for '%X'.
10366
10367'%X'
10368     Output the accumulated linker options specified by '-Wl' or a '%x'
10369     spec string.
10370
10371'%Y'
10372     Output the accumulated assembler options specified by '-Wa'.
10373
10374'%Z'
10375     Output the accumulated preprocessor options specified by '-Wp'.
10376
10377'%a'
10378     Process the 'asm' spec.  This is used to compute the switches to be
10379     passed to the assembler.
10380
10381'%A'
10382     Process the 'asm_final' spec.  This is a spec string for passing
10383     switches to an assembler post-processor, if such a program is
10384     needed.
10385
10386'%l'
10387     Process the 'link' spec.  This is the spec for computing the
10388     command line passed to the linker.  Typically it makes use of the
10389     '%L %G %S %D and %E' sequences.
10390
10391'%D'
10392     Dump out a '-L' option for each directory that GCC believes might
10393     contain startup files.  If the target supports multilibs then the
10394     current multilib directory is prepended to each of these paths.
10395
10396'%L'
10397     Process the 'lib' spec.  This is a spec string for deciding which
10398     libraries are included on the command line to the linker.
10399
10400'%G'
10401     Process the 'libgcc' spec.  This is a spec string for deciding
10402     which GCC support library is included on the command line to the
10403     linker.
10404
10405'%S'
10406     Process the 'startfile' spec.  This is a spec for deciding which
10407     object files are the first ones passed to the linker.  Typically
10408     this might be a file named 'crt0.o'.
10409
10410'%E'
10411     Process the 'endfile' spec.  This is a spec string that specifies
10412     the last object files that are passed to the linker.
10413
10414'%C'
10415     Process the 'cpp' spec.  This is used to construct the arguments to
10416     be passed to the C preprocessor.
10417
10418'%1'
10419     Process the 'cc1' spec.  This is used to construct the options to
10420     be passed to the actual C compiler ('cc1').
10421
10422'%2'
10423     Process the 'cc1plus' spec.  This is used to construct the options
10424     to be passed to the actual C++ compiler ('cc1plus').
10425
10426'%*'
10427     Substitute the variable part of a matched option.  See below.  Note
10428     that each comma in the substituted string is replaced by a single
10429     space.
10430
10431'%<S'
10432     Remove all occurrences of '-S' from the command line.  Note--this
10433     command is position dependent.  '%' commands in the spec string
10434     before this one see '-S', '%' commands in the spec string after
10435     this one do not.
10436
10437'%:FUNCTION(ARGS)'
10438     Call the named function FUNCTION, passing it ARGS.  ARGS is first
10439     processed as a nested spec string, then split into an argument
10440     vector in the usual fashion.  The function returns a string which
10441     is processed as if it had appeared literally as part of the current
10442     spec.
10443
10444     The following built-in spec functions are provided:
10445
10446     'getenv'
10447          The 'getenv' spec function takes two arguments: an environment
10448          variable name and a string.  If the environment variable is
10449          not defined, a fatal error is issued.  Otherwise, the return
10450          value is the value of the environment variable concatenated
10451          with the string.  For example, if 'TOPDIR' is defined as
10452          '/path/to/top', then:
10453
10454               %:getenv(TOPDIR /include)
10455
10456          expands to '/path/to/top/include'.
10457
10458     'if-exists'
10459          The 'if-exists' spec function takes one argument, an absolute
10460          pathname to a file.  If the file exists, 'if-exists' returns
10461          the pathname.  Here is a small example of its usage:
10462
10463               *startfile:
10464               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
10465
10466     'if-exists-else'
10467          The 'if-exists-else' spec function is similar to the
10468          'if-exists' spec function, except that it takes two arguments.
10469          The first argument is an absolute pathname to a file.  If the
10470          file exists, 'if-exists-else' returns the pathname.  If it
10471          does not exist, it returns the second argument.  This way,
10472          'if-exists-else' can be used to select one file or another,
10473          based on the existence of the first.  Here is a small example
10474          of its usage:
10475
10476               *startfile:
10477               crt0%O%s %:if-exists(crti%O%s) \
10478               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
10479
10480     'replace-outfile'
10481          The 'replace-outfile' spec function takes two arguments.  It
10482          looks for the first argument in the outfiles array and
10483          replaces it with the second argument.  Here is a small example
10484          of its usage:
10485
10486               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
10487
10488     'remove-outfile'
10489          The 'remove-outfile' spec function takes one argument.  It
10490          looks for the first argument in the outfiles array and removes
10491          it.  Here is a small example its usage:
10492
10493               %:remove-outfile(-lm)
10494
10495     'pass-through-libs'
10496          The 'pass-through-libs' spec function takes any number of
10497          arguments.  It finds any '-l' options and any non-options
10498          ending in '.a' (which it assumes are the names of linker input
10499          library archive files) and returns a result containing all the
10500          found arguments each prepended by '-plugin-opt=-pass-through='
10501          and joined by spaces.  This list is intended to be passed to
10502          the LTO linker plugin.
10503
10504               %:pass-through-libs(%G %L %G)
10505
10506     'print-asm-header'
10507          The 'print-asm-header' function takes no arguments and simply
10508          prints a banner like:
10509
10510               Assembler options
10511               =================
10512
10513               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10514
10515          It is used to separate compiler options from assembler options
10516          in the '--target-help' output.
10517
10518'%{S}'
10519     Substitutes the '-S' switch, if that switch is given to GCC.  If
10520     that switch is not specified, this substitutes nothing.  Note that
10521     the leading dash is omitted when specifying this option, and it is
10522     automatically inserted if the substitution is performed.  Thus the
10523     spec string '%{foo}' matches the command-line option '-foo' and
10524     outputs the command-line option '-foo'.
10525
10526'%W{S}'
10527     Like %{'S'} but mark last argument supplied within as a file to be
10528     deleted on failure.
10529
10530'%{S*}'
10531     Substitutes all the switches specified to GCC whose names start
10532     with '-S', but which also take an argument.  This is used for
10533     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
10534     being one switch whose name starts with 'o'.  %{o*} substitutes
10535     this text, including the space.  Thus two arguments are generated.
10536
10537'%{S*&T*}'
10538     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
10539     of 'S' and 'T' in the spec is not significant).  There can be any
10540     number of ampersand-separated variables; for each the wild card is
10541     optional.  Useful for CPP as '%{D*&U*&A*}'.
10542
10543'%{S:X}'
10544     Substitutes 'X', if the '-S' switch is given to GCC.
10545
10546'%{!S:X}'
10547     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
10548
10549'%{S*:X}'
10550     Substitutes 'X' if one or more switches whose names start with '-S'
10551     are specified to GCC.  Normally 'X' is substituted only once, no
10552     matter how many such switches appeared.  However, if '%*' appears
10553     somewhere in 'X', then 'X' is substituted once for each matching
10554     switch, with the '%*' replaced by the part of that switch matching
10555     the '*'.
10556
10557'%{.S:X}'
10558     Substitutes 'X', if processing a file with suffix 'S'.
10559
10560'%{!.S:X}'
10561     Substitutes 'X', if _not_ processing a file with suffix 'S'.
10562
10563'%{,S:X}'
10564     Substitutes 'X', if processing a file for language 'S'.
10565
10566'%{!,S:X}'
10567     Substitutes 'X', if not processing a file for language 'S'.
10568
10569'%{S|P:X}'
10570     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
10571     be combined with '!', '.', ',', and '*' sequences as well, although
10572     they have a stronger binding than the '|'.  If '%*' appears in 'X',
10573     all of the alternatives must be starred, and only the first
10574     matching alternative is substituted.
10575
10576     For example, a spec string like this:
10577
10578          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
10579
10580     outputs the following command-line options from the following input
10581     command-line options:
10582
10583          fred.c        -foo -baz
10584          jim.d         -bar -boggle
10585          -d fred.c     -foo -baz -boggle
10586          -d jim.d      -bar -baz -boggle
10587
10588'%{S:X; T:Y; :D}'
10589
10590     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
10591     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
10592     clauses as you need.  This may be combined with '.', ',', '!', '|',
10593     and '*' as needed.
10594
10595 The conditional text 'X' in a %{'S':'X'} or similar construct may
10596contain other nested '%' constructs or spaces, or even newlines.  They
10597are processed as usual, as described above.  Trailing white space in 'X'
10598is ignored.  White space may also appear anywhere on the left side of
10599the colon in these constructs, except between '.' or '*' and the
10600corresponding word.
10601
10602 The '-O', '-f', '-m', and '-W' switches are handled specifically in
10603these constructs.  If another value of '-O' or the negated form of a
10604'-f', '-m', or '-W' switch is found later in the command line, the
10605earlier switch value is ignored, except with {'S'*} where 'S' is just
10606one letter, which passes all matching options.
10607
10608 The character '|' at the beginning of the predicate text is used to
10609indicate that a command should be piped to the following command, but
10610only if '-pipe' is specified.
10611
10612 It is built into GCC which switches take arguments and which do not.
10613(You might think it would be useful to generalize this to allow each
10614compiler's spec to say which switches take arguments.  But this cannot
10615be done in a consistent fashion.  GCC cannot even decide which input
10616files have been specified without knowing which switches take arguments,
10617and it must know which input files to compile in order to tell which
10618compilers to run).
10619
10620 GCC also knows implicitly that arguments starting in '-l' are to be
10621treated as compiler output files, and passed to the linker in their
10622proper position among the other output files.
10623
10624
10625File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
10626
106273.16 Specifying Target Machine and Compiler Version
10628===================================================
10629
10630The usual way to run GCC is to run the executable called 'gcc', or
10631'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
10632version other than the one that was installed last.
10633
10634
10635File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
10636
106373.17 Hardware Models and Configurations
10638=======================================
10639
10640Each target machine types can have its own special options, starting
10641with '-m', to choose among various hardware models or
10642configurations--for example, 68010 vs 68020, floating coprocessor or
10643none.  A single installed version of the compiler can compile for any
10644model or configuration, according to the options specified.
10645
10646 Some configurations of the compiler also support additional special
10647options, usually for compatibility with other compilers on the same
10648platform.
10649
10650* Menu:
10651
10652* AArch64 Options::
10653* Adapteva Epiphany Options::
10654* ARM Options::
10655* AVR Options::
10656* Blackfin Options::
10657* C6X Options::
10658* CRIS Options::
10659* CR16 Options::
10660* Darwin Options::
10661* DEC Alpha Options::
10662* FR30 Options::
10663* FRV Options::
10664* GNU/Linux Options::
10665* H8/300 Options::
10666* HPPA Options::
10667* i386 and x86-64 Options::
10668* i386 and x86-64 Windows Options::
10669* IA-64 Options::
10670* LM32 Options::
10671* M32C Options::
10672* M32R/D Options::
10673* M680x0 Options::
10674* MCore Options::
10675* MeP Options::
10676* MicroBlaze Options::
10677* MIPS Options::
10678* MMIX Options::
10679* MN10300 Options::
10680* Moxie Options::
10681* PDP-11 Options::
10682* picoChip Options::
10683* PowerPC Options::
10684* RL78 Options::
10685* RS/6000 and PowerPC Options::
10686* RX Options::
10687* S/390 and zSeries Options::
10688* Score Options::
10689* SH Options::
10690* Solaris 2 Options::
10691* SPARC Options::
10692* SPU Options::
10693* System V Options::
10694* TILE-Gx Options::
10695* TILEPro Options::
10696* V850 Options::
10697* VAX Options::
10698* VMS Options::
10699* VxWorks Options::
10700* x86-64 Options::
10701* Xstormy16 Options::
10702* Xtensa Options::
10703* zSeries Options::
10704
10705
10706File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
10707
107083.17.1 AArch64 Options
10709----------------------
10710
10711These options are defined for AArch64 implementations:
10712
10713'-mbig-endian'
10714     Generate big-endian code.  This is the default when GCC is
10715     configured for an 'aarch64_be-*-*' target.
10716
10717'-mgeneral-regs-only'
10718     Generate code which uses only the general registers.
10719
10720'-mlittle-endian'
10721     Generate little-endian code.  This is the default when GCC is
10722     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
10723
10724'-mcmodel=tiny'
10725     Generate code for the tiny code model.  The program and its
10726     statically defined symbols must be within 1GB of each other.
10727     Pointers are 64 bits.  Programs can be statically or dynamically
10728     linked.  This model is not fully implemented and mostly treated as
10729     'small'.
10730
10731'-mcmodel=small'
10732     Generate code for the small code model.  The program and its
10733     statically defined symbols must be within 4GB of each other.
10734     Pointers are 64 bits.  Programs can be statically or dynamically
10735     linked.  This is the default code model.
10736
10737'-mcmodel=large'
10738     Generate code for the large code model.  This makes no assumptions
10739     about addresses and sizes of sections.  Pointers are 64 bits.
10740     Programs can be statically linked only.
10741
10742'-mstrict-align'
10743     Do not assume that unaligned memory references will be handled by
10744     the system.
10745
10746'-momit-leaf-frame-pointer'
10747'-mno-omit-leaf-frame-pointer'
10748     Omit or keep the frame pointer in leaf functions.  The former
10749     behaviour is the default.
10750
10751'-mtls-dialect=desc'
10752     Use TLS descriptors as the thread-local storage mechanism for
10753     dynamic accesses of TLS variables.  This is the default.
10754
10755'-mtls-dialect=traditional'
10756     Use traditional TLS as the thread-local storage mechanism for
10757     dynamic accesses of TLS variables.
10758
10759'-march=NAME'
10760     Specify the name of the target architecture, optionally suffixed by
10761     one or more feature modifiers.  This option has the form
10762     '-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is
10763     'armv8-a'.  The possible values for FEATURE are documented in the
10764     sub-section below.
10765
10766     Where conflicting feature modifiers are specified, the right-most
10767     feature is used.
10768
10769     GCC uses this name to determine what kind of instructions it can
10770     emit when generating assembly code.  This option can be used in
10771     conjunction with or instead of the '-mcpu=' option.
10772
10773'-mcpu=NAME'
10774     Specify the name of the target processor, optionally suffixed by
10775     one or more feature modifiers.  This option has the form
10776     '-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are
10777     'generic', 'large'.  The possible values for FEATURE are documented
10778     in the sub-section below.
10779
10780     Where conflicting feature modifiers are specified, the right-most
10781     feature is used.
10782
10783     GCC uses this name to determine what kind of instructions it can
10784     emit when generating assembly code.
10785
10786'-mtune=NAME'
10787     Specify the name of the processor to tune the performance for.  The
10788     code will be tuned as if the target processor were of the type
10789     specified in this option, but still using instructions compatible
10790     with the target processor specified by a '-mcpu=' option.  This
10791     option cannot be suffixed by feature modifiers.
10792
107933.17.1.1 '-march' and '-mcpu' feature modifiers
10794...............................................
10795
10796Feature modifiers used with '-march' and '-mcpu' can be one the
10797following:
10798
10799'crypto'
10800     Enable Crypto extension.  This implies Advanced SIMD is enabled.
10801'fp'
10802     Enable floating-point instructions.
10803'simd'
10804     Enable Advanced SIMD instructions.  This implies floating-point
10805     instructions are enabled.  This is the default for all current
10806     possible values for options '-march' and '-mcpu='.
10807
10808
10809File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARM Options,  Prev: AArch64 Options,  Up: Submodel Options
10810
108113.17.2 Adapteva Epiphany Options
10812--------------------------------
10813
10814These '-m' options are defined for Adapteva Epiphany:
10815
10816'-mhalf-reg-file'
10817     Don't allocate any register in the range 'r32'...'r63'.  That
10818     allows code to run on hardware variants that lack these registers.
10819
10820'-mprefer-short-insn-regs'
10821     Preferrentially allocate registers that allow short instruction
10822     generation.  This can result in increased instruction count, so
10823     this may either reduce or increase overall code size.
10824
10825'-mbranch-cost=NUM'
10826     Set the cost of branches to roughly NUM "simple" instructions.
10827     This cost is only a heuristic and is not guaranteed to produce
10828     consistent results across releases.
10829
10830'-mcmove'
10831     Enable the generation of conditional moves.
10832
10833'-mnops=NUM'
10834     Emit NUM NOPs before every other generated instruction.
10835
10836'-mno-soft-cmpsf'
10837     For single-precision floating-point comparisons, emit an 'fsub'
10838     instruction and test the flags.  This is faster than a software
10839     comparison, but can get incorrect results in the presence of NaNs,
10840     or when two different small numbers are compared such that their
10841     difference is calculated as zero.  The default is '-msoft-cmpsf',
10842     which uses slower, but IEEE-compliant, software comparisons.
10843
10844'-mstack-offset=NUM'
10845     Set the offset between the top of the stack and the stack pointer.
10846     E.g., a value of 8 means that the eight bytes in the range
10847     'sp+0...sp+7' can be used by leaf functions without stack
10848     allocation.  Values other than '8' or '16' are untested and
10849     unlikely to work.  Note also that this option changes the ABI;
10850     compiling a program with a different stack offset than the
10851     libraries have been compiled with generally does not work.  This
10852     option can be useful if you want to evaluate if a different stack
10853     offset would give you better code, but to actually use a different
10854     stack offset to build working programs, it is recommended to
10855     configure the toolchain with the appropriate
10856     '--with-stack-offset=NUM' option.
10857
10858'-mno-round-nearest'
10859     Make the scheduler assume that the rounding mode has been set to
10860     truncating.  The default is '-mround-nearest'.
10861
10862'-mlong-calls'
10863     If not otherwise specified by an attribute, assume all calls might
10864     be beyond the offset range of the 'b' / 'bl' instructions, and
10865     therefore load the function address into a register before
10866     performing a (otherwise direct) call.  This is the default.
10867
10868'-mshort-calls'
10869     If not otherwise specified by an attribute, assume all direct calls
10870     are in the range of the 'b' / 'bl' instructions, so use these
10871     instructions for direct calls.  The default is '-mlong-calls'.
10872
10873'-msmall16'
10874     Assume addresses can be loaded as 16-bit unsigned values.  This
10875     does not apply to function addresses for which '-mlong-calls'
10876     semantics are in effect.
10877
10878'-mfp-mode=MODE'
10879     Set the prevailing mode of the floating-point unit.  This
10880     determines the floating-point mode that is provided and expected at
10881     function call and return time.  Making this mode match the mode you
10882     predominantly need at function start can make your programs smaller
10883     and faster by avoiding unnecessary mode switches.
10884
10885     MODE can be set to one the following values:
10886
10887     'caller'
10888          Any mode at function entry is valid, and retained or restored
10889          when the function returns, and when it calls other functions.
10890          This mode is useful for compiling libraries or other
10891          compilation units you might want to incorporate into different
10892          programs with different prevailing FPU modes, and the
10893          convenience of being able to use a single object file
10894          outweighs the size and speed overhead for any extra mode
10895          switching that might be needed, compared with what would be
10896          needed with a more specific choice of prevailing FPU mode.
10897
10898     'truncate'
10899          This is the mode used for floating-point calculations with
10900          truncating (i.e. round towards zero) rounding mode.  That
10901          includes conversion from floating point to integer.
10902
10903     'round-nearest'
10904          This is the mode used for floating-point calculations with
10905          round-to-nearest-or-even rounding mode.
10906
10907     'int'
10908          This is the mode used to perform integer calculations in the
10909          FPU, e.g. integer multiply, or integer
10910          multiply-and-accumulate.
10911
10912     The default is '-mfp-mode=caller'
10913
10914'-mnosplit-lohi'
10915'-mno-postinc'
10916'-mno-postmodify'
10917     Code generation tweaks that disable, respectively, splitting of
10918     32-bit loads, generation of post-increment addresses, and
10919     generation of post-modify addresses.  The defaults are
10920     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
10921
10922'-mnovect-double'
10923     Change the preferred SIMD mode to SImode.  The default is
10924     '-mvect-double', which uses DImode as preferred SIMD mode.
10925
10926'-max-vect-align=NUM'
10927     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
10928     8.  The default is 8.  Note that this is an ABI change, even though
10929     many library function interfaces are unaffected if they don't use
10930     SIMD vector modes in places that affect size and/or alignment of
10931     relevant types.
10932
10933'-msplit-vecmove-early'
10934     Split vector moves into single word moves before reload.  In theory
10935     this can give better register allocation, but so far the reverse
10936     seems to be generally the case.
10937
10938'-m1reg-REG'
10939     Specify a register to hold the constant -1, which makes loading
10940     small negative constants and certain bitmasks faster.  Allowable
10941     values for REG are 'r43' and 'r63', which specify use of that
10942     register as a fixed register, and 'none', which means that no
10943     register is used for this purpose.  The default is '-m1reg-none'.
10944
10945
10946File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
10947
109483.17.3 ARM Options
10949------------------
10950
10951These '-m' options are defined for Advanced RISC Machines (ARM)
10952architectures:
10953
10954'-mabi=NAME'
10955     Generate code for the specified ABI.  Permissible values are:
10956     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
10957
10958'-mapcs-frame'
10959     Generate a stack frame that is compliant with the ARM Procedure
10960     Call Standard for all functions, even if this is not strictly
10961     necessary for correct execution of the code.  Specifying
10962     '-fomit-frame-pointer' with this option causes the stack frames not
10963     to be generated for leaf functions.  The default is
10964     '-mno-apcs-frame'.
10965
10966'-mapcs'
10967     This is a synonym for '-mapcs-frame'.
10968
10969'-mthumb-interwork'
10970     Generate code that supports calling between the ARM and Thumb
10971     instruction sets.  Without this option, on pre-v5 architectures,
10972     the two instruction sets cannot be reliably used inside one
10973     program.  The default is '-mno-thumb-interwork', since slightly
10974     larger code is generated when '-mthumb-interwork' is specified.  In
10975     AAPCS configurations this option is meaningless.
10976
10977'-mno-sched-prolog'
10978     Prevent the reordering of instructions in the function prologue, or
10979     the merging of those instruction with the instructions in the
10980     function's body.  This means that all functions start with a
10981     recognizable set of instructions (or in fact one of a choice from a
10982     small set of different function prologues), and this information
10983     can be used to locate the start of functions inside an executable
10984     piece of code.  The default is '-msched-prolog'.
10985
10986'-mfloat-abi=NAME'
10987     Specifies which floating-point ABI to use.  Permissible values are:
10988     'soft', 'softfp' and 'hard'.
10989
10990     Specifying 'soft' causes GCC to generate output containing library
10991     calls for floating-point operations.  'softfp' allows the
10992     generation of code using hardware floating-point instructions, but
10993     still uses the soft-float calling conventions.  'hard' allows
10994     generation of floating-point instructions and uses FPU-specific
10995     calling conventions.
10996
10997     The default depends on the specific target configuration.  Note
10998     that the hard-float and soft-float ABIs are not link-compatible;
10999     you must compile your entire program with the same ABI, and link
11000     with a compatible set of libraries.
11001
11002'-mlittle-endian'
11003     Generate code for a processor running in little-endian mode.  This
11004     is the default for all standard configurations.
11005
11006'-mbig-endian'
11007     Generate code for a processor running in big-endian mode; the
11008     default is to compile code for a little-endian processor.
11009
11010'-mwords-little-endian'
11011     This option only applies when generating code for big-endian
11012     processors.  Generate code for a little-endian word order but a
11013     big-endian byte order.  That is, a byte order of the form
11014     '32107654'.  Note: this option should only be used if you require
11015     compatibility with code for big-endian ARM processors generated by
11016     versions of the compiler prior to 2.8.  This option is now
11017     deprecated.
11018
11019'-march=NAME'
11020     This specifies the name of the target ARM architecture.  GCC uses
11021     this name to determine what kind of instructions it can emit when
11022     generating assembly code.  This option can be used in conjunction
11023     with or instead of the '-mcpu=' option.  Permissible names are:
11024     'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5',
11025     'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2',
11026     'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r',
11027     'armv7-m', 'armv7e-m' 'armv8-a', 'iwmmxt', 'iwmmxt2', 'ep9312'.
11028
11029     '-march=native' causes the compiler to auto-detect the architecture
11030     of the build computer.  At present, this feature is only supported
11031     on Linux, and not all architectures are recognized.  If the
11032     auto-detect is unsuccessful the option has no effect.
11033
11034'-mtune=NAME'
11035     This option specifies the name of the target ARM processor for
11036     which GCC should tune the performance of the code.  For some ARM
11037     implementations better performance can be obtained by using this
11038     option.  Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6',
11039     'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d',
11040     'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i',
11041     'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe',
11042     'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t',
11043     'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110',
11044     'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t',
11045     'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t',
11046     'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e',
11047     'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore',
11048     'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s',
11049     'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
11050     'cortex-a15', 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-m4',
11051     'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus',
11052     'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526',
11053     'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'.
11054
11055     '-mtune=generic-ARCH' specifies that GCC should tune the
11056     performance for a blend of processors within architecture ARCH.
11057     The aim is to generate code that run well on the current most
11058     popular processors, balancing between optimizations that benefit
11059     some CPUs in the range, and avoiding performance pitfalls of other
11060     CPUs.  The effects of this option may change in future GCC versions
11061     as CPU models come and go.
11062
11063     '-mtune=native' causes the compiler to auto-detect the CPU of the
11064     build computer.  At present, this feature is only supported on
11065     Linux, and not all architectures are recognized.  If the
11066     auto-detect is unsuccessful the option has no effect.
11067
11068'-mcpu=NAME'
11069     This specifies the name of the target ARM processor.  GCC uses this
11070     name to derive the name of the target ARM architecture (as if
11071     specified by '-march') and the ARM processor type for which to tune
11072     for performance (as if specified by '-mtune').  Where this option
11073     is used in conjunction with '-march' or '-mtune', those options
11074     take precedence over the appropriate part of this option.
11075
11076     Permissible names for this option are the same as those for
11077     '-mtune'.
11078
11079     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
11080     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
11081     information.
11082
11083     '-mcpu=native' causes the compiler to auto-detect the CPU of the
11084     build computer.  At present, this feature is only supported on
11085     Linux, and not all architectures are recognized.  If the
11086     auto-detect is unsuccessful the option has no effect.
11087
11088'-mfpu=NAME'
11089     This specifies what floating-point hardware (or hardware emulation)
11090     is available on the target.  Permissible names are: 'vfp', 'vfpv3',
11091     'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd',
11092     'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16',
11093     'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and
11094     'crypto-neon-fp-armv8'.
11095
11096     If '-msoft-float' is specified this specifies the format of
11097     floating-point values.
11098
11099     If the selected floating-point hardware includes the NEON extension
11100     (e.g.  '-mfpu'='neon'), note that floating-point operations are not
11101     generated by GCC's auto-vectorization pass unless
11102     '-funsafe-math-optimizations' is also specified.  This is because
11103     NEON hardware does not fully implement the IEEE 754 standard for
11104     floating-point arithmetic (in particular denormal values are
11105     treated as zero), so the use of NEON instructions may lead to a
11106     loss of precision.
11107
11108'-mfp16-format=NAME'
11109     Specify the format of the '__fp16' half-precision floating-point
11110     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
11111     default is 'none', in which case the '__fp16' type is not defined.
11112     *Note Half-Precision::, for more information.
11113
11114'-mstructure-size-boundary=N'
11115     The sizes of all structures and unions are rounded up to a multiple
11116     of the number of bits set by this option.  Permissible values are
11117     8, 32 and 64.  The default value varies for different toolchains.
11118     For the COFF targeted toolchain the default value is 8.  A value of
11119     64 is only allowed if the underlying ABI supports it.
11120
11121     Specifying a larger number can produce faster, more efficient code,
11122     but can also increase the size of the program.  Different values
11123     are potentially incompatible.  Code compiled with one value cannot
11124     necessarily expect to work with code or libraries compiled with
11125     another value, if they exchange information using structures or
11126     unions.
11127
11128'-mabort-on-noreturn'
11129     Generate a call to the function 'abort' at the end of a 'noreturn'
11130     function.  It is executed if the function tries to return.
11131
11132'-mlong-calls'
11133'-mno-long-calls'
11134     Tells the compiler to perform function calls by first loading the
11135     address of the function into a register and then performing a
11136     subroutine call on this register.  This switch is needed if the
11137     target function lies outside of the 64-megabyte addressing range of
11138     the offset-based version of subroutine call instruction.
11139
11140     Even if this switch is enabled, not all function calls are turned
11141     into long calls.  The heuristic is that static functions, functions
11142     that have the 'short-call' attribute, functions that are inside the
11143     scope of a '#pragma no_long_calls' directive, and functions whose
11144     definitions have already been compiled within the current
11145     compilation unit are not turned into long calls.  The exceptions to
11146     this rule are that weak function definitions, functions with the
11147     'long-call' attribute or the 'section' attribute, and functions
11148     that are within the scope of a '#pragma long_calls' directive are
11149     always turned into long calls.
11150
11151     This feature is not enabled by default.  Specifying
11152     '-mno-long-calls' restores the default behavior, as does placing
11153     the function calls within the scope of a '#pragma long_calls_off'
11154     directive.  Note these switches have no effect on how the compiler
11155     generates code to handle function calls via function pointers.
11156
11157'-msingle-pic-base'
11158     Treat the register used for PIC addressing as read-only, rather
11159     than loading it in the prologue for each function.  The runtime
11160     system is responsible for initializing this register with an
11161     appropriate value before execution begins.
11162
11163'-mpic-register=REG'
11164     Specify the register to be used for PIC addressing.  For standard
11165     PIC base case, the default will be any suitable register determined
11166     by compiler.  For single PIC base case, the default is 'R9' if
11167     target is EABI based or stack-checking is enabled, otherwise the
11168     default is 'R10'.
11169
11170'-mpoke-function-name'
11171     Write the name of each function into the text section, directly
11172     preceding the function prologue.  The generated code is similar to
11173     this:
11174
11175               t0
11176                   .ascii "arm_poke_function_name", 0
11177                   .align
11178               t1
11179                   .word 0xff000000 + (t1 - t0)
11180               arm_poke_function_name
11181                   mov     ip, sp
11182                   stmfd   sp!, {fp, ip, lr, pc}
11183                   sub     fp, ip, #4
11184
11185     When performing a stack backtrace, code can inspect the value of
11186     'pc' stored at 'fp + 0'.  If the trace function then looks at
11187     location 'pc - 12' and the top 8 bits are set, then we know that
11188     there is a function name embedded immediately preceding this
11189     location and has length '((pc[-3]) & 0xff000000)'.
11190
11191'-mthumb'
11192'-marm'
11193
11194     Select between generating code that executes in ARM and Thumb
11195     states.  The default for most configurations is to generate code
11196     that executes in ARM state, but the default can be changed by
11197     configuring GCC with the '--with-mode='STATE configure option.
11198
11199'-mtpcs-frame'
11200     Generate a stack frame that is compliant with the Thumb Procedure
11201     Call Standard for all non-leaf functions.  (A leaf function is one
11202     that does not call any other functions.)  The default is
11203     '-mno-tpcs-frame'.
11204
11205'-mtpcs-leaf-frame'
11206     Generate a stack frame that is compliant with the Thumb Procedure
11207     Call Standard for all leaf functions.  (A leaf function is one that
11208     does not call any other functions.)  The default is
11209     '-mno-apcs-leaf-frame'.
11210
11211'-mcallee-super-interworking'
11212     Gives all externally visible functions in the file being compiled
11213     an ARM instruction set header which switches to Thumb mode before
11214     executing the rest of the function.  This allows these functions to
11215     be called from non-interworking code.  This option is not valid in
11216     AAPCS configurations because interworking is enabled by default.
11217
11218'-mcaller-super-interworking'
11219     Allows calls via function pointers (including virtual functions) to
11220     execute correctly regardless of whether the target code has been
11221     compiled for interworking or not.  There is a small overhead in the
11222     cost of executing a function pointer if this option is enabled.
11223     This option is not valid in AAPCS configurations because
11224     interworking is enabled by default.
11225
11226'-mtp=NAME'
11227     Specify the access model for the thread local storage pointer.  The
11228     valid models are 'soft', which generates calls to
11229     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
11230     'cp15' directly (supported in the arm6k architecture), and 'auto',
11231     which uses the best available method for the selected processor.
11232     The default setting is 'auto'.
11233
11234'-mtls-dialect=DIALECT'
11235     Specify the dialect to use for accessing thread local storage.  Two
11236     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
11237     selects the original GNU scheme for supporting local and global
11238     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
11239     scheme, which provides better performance for shared libraries.
11240     The GNU descriptor scheme is compatible with the original scheme,
11241     but does require new assembler, linker and library support.
11242     Initial and local exec TLS models are unaffected by this option and
11243     always use the original scheme.
11244
11245'-mword-relocations'
11246     Only generate absolute relocations on word-sized values (i.e.
11247     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
11248     SymbianOS) where the runtime loader imposes this restriction, and
11249     when '-fpic' or '-fPIC' is specified.
11250
11251'-mfix-cortex-m3-ldrd'
11252     Some Cortex-M3 cores can cause data corruption when 'ldrd'
11253     instructions with overlapping destination and base registers are
11254     used.  This option avoids generating these instructions.  This
11255     option is enabled by default when '-mcpu=cortex-m3' is specified.
11256
11257'-munaligned-access'
11258'-mno-unaligned-access'
11259     Enables (or disables) reading and writing of 16- and 32- bit values
11260     from addresses that are not 16- or 32- bit aligned.  By default
11261     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
11262     architectures, and enabled for all other architectures.  If
11263     unaligned access is not enabled then words in packed data
11264     structures will be accessed a byte at a time.
11265
11266     The ARM attribute 'Tag_CPU_unaligned_access' will be set in the
11267     generated object file to either true or false, depending upon the
11268     setting of this option.  If unaligned access is enabled then the
11269     preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined.
11270
11271
11272File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
11273
112743.17.4 AVR Options
11275------------------
11276
11277These options are defined for AVR implementations:
11278
11279'-mmcu=MCU'
11280     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
11281
11282     The default for this option is 'avr2'.
11283
11284     GCC supports the following AVR devices and ISAs:
11285
11286     'avr2'
11287          "Classic" devices with up to 8 KiB of program memory.
11288          MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313',
11289          'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414',
11290          'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'.
11291
11292     'avr25'
11293          "Classic" devices with up to 8 KiB of program memory and with
11294          the 'MOVW' instruction.
11295          MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a',
11296          'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a',
11297          'attiny25', 'attiny261', 'attiny261a', 'attiny43u',
11298          'attiny4313', 'attiny44', 'attiny44a', 'attiny45',
11299          'attiny461', 'attiny461a', 'attiny48', 'attiny84',
11300          'attiny84a', 'attiny85', 'attiny861', 'attiny861a',
11301          'attiny87', 'attiny88', 'at86rf401'.
11302
11303     'avr3'
11304          "Classic" devices with 16 KiB up to 64 KiB of program memory.
11305          MCU = 'at43usb355', 'at76c711'.
11306
11307     'avr31'
11308          "Classic" devices with 128 KiB of program memory.
11309          MCU = 'atmega103', 'at43usb320'.
11310
11311     'avr35'
11312          "Classic" devices with 16 KiB up to 64 KiB of program memory
11313          and with the 'MOVW' instruction.
11314          MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2',
11315          'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'.
11316
11317     'avr4'
11318          "Enhanced" devices with up to 8 KiB of program memory.
11319          MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a',
11320          'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a',
11321          'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88',
11322          'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1',
11323          'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'.
11324
11325     'avr5'
11326          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
11327
11328          MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16',
11329          'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb',
11330          'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161',
11331          'atmega162', 'atmega163', 'atmega164a', 'atmega164p',
11332          'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p',
11333          'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p',
11334          'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p',
11335          'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a',
11336          'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1',
11337          'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a',
11338          'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a',
11339          'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p',
11340          'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329',
11341          'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290',
11342          'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
11343          'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1',
11344          'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2',
11345          'atmega640', 'atmega644', 'atmega644a', 'atmega644p',
11346          'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p',
11347          'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649',
11348          'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a',
11349          'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161',
11350          'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646',
11351          'at90usb647', 'at94k', 'm3000'.
11352
11353     'avr51'
11354          "Enhanced" devices with 128 KiB of program memory.
11355          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
11356          'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p',
11357          'at90can128', 'at90usb1286', 'at90usb1287'.
11358
11359     'avr6'
11360          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
11361          of program memory.
11362          MCU = 'atmega2560', 'atmega2561'.
11363
11364     'avrxmega2'
11365          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
11366          program memory.
11367          MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s',
11368          'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4',
11369          'atxmega16x1', 'atxmega32a4', 'atxmega32a4u', 'atxmega32c4',
11370          'atxmega32d4', 'atxmega32e5', 'atxmega32x1'.
11371
11372     'avrxmega4'
11373          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11374          program memory.
11375          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
11376          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
11377          'atxmega64d4'.
11378
11379     'avrxmega5'
11380          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11381          program memory and more than 64 KiB of RAM.
11382          MCU = 'atxmega64a1', 'atxmega64a1u'.
11383
11384     'avrxmega6'
11385          "XMEGA" devices with more than 128 KiB of program memory.
11386          MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3',
11387          'atxmega128a3u', 'atxmega128b1', 'atxmega128b3',
11388          'atxmega128c3', 'atxmega128d3', 'atxmega128d4',
11389          'atxmega192a3', 'atxmega192a3u', 'atxmega192c3',
11390          'atxmega192d3', 'atxmega256a3', 'atxmega256a3b',
11391          'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3',
11392          'atxmega256d3', 'atxmega384c3', 'atxmega384d3'.
11393
11394     'avrxmega7'
11395          "XMEGA" devices with more than 128 KiB of program memory and
11396          more than 64 KiB of RAM.
11397          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
11398
11399     'avr1'
11400          This ISA is implemented by the minimal AVR core and supported
11401          for assembler only.
11402          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
11403          'at90s1200'.
11404
11405'-maccumulate-args'
11406     Accumulate outgoing function arguments and acquire/release the
11407     needed stack space for outgoing function arguments once in function
11408     prologue/epilogue.  Without this option, outgoing arguments are
11409     pushed before calling a function and popped afterwards.
11410
11411     Popping the arguments after the function call can be expensive on
11412     AVR so that accumulating the stack space might lead to smaller
11413     executables because arguments need not to be removed from the stack
11414     after such a function call.
11415
11416     This option can lead to reduced code size for functions that
11417     perform several calls to functions that get their arguments on the
11418     stack like calls to printf-like functions.
11419
11420'-mbranch-cost=COST'
11421     Set the branch costs for conditional branch instructions to COST.
11422     Reasonable values for COST are small, non-negative integers.  The
11423     default branch cost is 0.
11424
11425'-mcall-prologues'
11426     Functions prologues/epilogues are expanded as calls to appropriate
11427     subroutines.  Code size is smaller.
11428
11429'-mint8'
11430     Assume 'int' to be 8-bit integer.  This affects the sizes of all
11431     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
11432     and 'long long' is 4 bytes.  Please note that this option does not
11433     conform to the C standards, but it results in smaller code size.
11434
11435'-mno-interrupts'
11436     Generated code is not compatible with hardware interrupts.  Code
11437     size is smaller.
11438
11439'-mrelax'
11440     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
11441     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
11442     just adds the '--relax' option to the linker command line when the
11443     linker is called.
11444
11445     Jump relaxing is performed by the linker because jump offsets are
11446     not known before code is located.  Therefore, the assembler code
11447     generated by the compiler is the same, but the instructions in the
11448     executable may differ from instructions in the assembler code.
11449
11450     Relaxing must be turned on if linker stubs are needed, see the
11451     section on 'EIND' and linker stubs below.
11452
11453'-msp8'
11454     Treat the stack pointer register as an 8-bit register, i.e. assume
11455     the high byte of the stack pointer is zero.  In general, you don't
11456     need to set this option by hand.
11457
11458     This option is used internally by the compiler to select and build
11459     multilibs for architectures 'avr2' and 'avr25'.  These
11460     architectures mix devices with and without 'SPH'.  For any setting
11461     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will
11462     add or remove this option from the compiler proper's command line,
11463     because the compiler then knows if the device or architecture has
11464     an 8-bit stack pointer and thus no 'SPH' register or not.
11465
11466'-mstrict-X'
11467     Use address register 'X' in a way proposed by the hardware.  This
11468     means that 'X' is only used in indirect, post-increment or
11469     pre-decrement addressing.
11470
11471     Without this option, the 'X' register may be used in the same way
11472     as 'Y' or 'Z' which then is emulated by additional instructions.
11473     For example, loading a value with 'X+const' addressing with a small
11474     non-negative 'const < 64' to a register RN is performed as
11475
11476          adiw r26, const   ; X += const
11477          ld   RN, X        ; RN = *X
11478          sbiw r26, const   ; X -= const
11479
11480'-mtiny-stack'
11481     Only change the lower 8 bits of the stack pointer.
11482
11483'-Waddr-space-convert'
11484     Warn about conversions between address spaces in the case where the
11485     resulting address space is not contained in the incoming address
11486     space.
11487
114883.17.4.1 'EIND' and Devices with more than 128 Ki Bytes of Flash
11489................................................................
11490
11491Pointers in the implementation are 16 bits wide.  The address of a
11492function or label is represented as word address so that indirect jumps
11493and calls can target any code address in the range of 64 Ki words.
11494
11495 In order to facilitate indirect jump on devices with more than 128 Ki
11496bytes of program memory space, there is a special function register
11497called 'EIND' that serves as most significant part of the target address
11498when 'EICALL' or 'EIJMP' instructions are used.
11499
11500 Indirect jumps and calls on these devices are handled as follows by the
11501compiler and are subject to some limitations:
11502
11503   * The compiler never sets 'EIND'.
11504
11505   * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP'
11506     instructions or might read 'EIND' directly in order to emulate an
11507     indirect call/jump by means of a 'RET' instruction.
11508
11509   * The compiler assumes that 'EIND' never changes during the startup
11510     code or during the application.  In particular, 'EIND' is not
11511     saved/restored in function or interrupt service routine
11512     prologue/epilogue.
11513
11514   * For indirect calls to functions and computed goto, the linker
11515     generates _stubs_.  Stubs are jump pads sometimes also called
11516     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
11517     The stub contains a direct jump to the desired address.
11518
11519   * Linker relaxation must be turned on so that the linker will
11520     generate the stubs correctly an all situaltion.  See the compiler
11521     option '-mrelax' and the linler option '--relax'.  There are corner
11522     cases where the linker is supposed to generate stubs but aborts
11523     without relaxation and without a helpful error message.
11524
11525   * The default linker script is arranged for code with 'EIND = 0'.  If
11526     code is supposed to work for a setup with 'EIND != 0', a custom
11527     linker script has to be used in order to place the sections whose
11528     name start with '.trampolines' into the segment where 'EIND' points
11529     to.
11530
11531   * The startup code from libgcc never sets 'EIND'.  Notice that
11532     startup code is a blend of code from libgcc and AVR-LibC. For the
11533     impact of AVR-LibC on 'EIND', see the
11534     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
11535
11536   * It is legitimate for user-specific startup code to set up 'EIND'
11537     early, for example by means of initialization code located in
11538     section '.init3'.  Such code runs prior to general startup code
11539     that initializes RAM and calls constructors, but after the bit of
11540     startup code from AVR-LibC that sets 'EIND' to the segment where
11541     the vector table is located.
11542          #include <avr/io.h>
11543
11544          static void
11545          __attribute__((section(".init3"),naked,used,no_instrument_function))
11546          init3_set_eind (void)
11547          {
11548            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
11549                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
11550          }
11551
11552     The '__trampolines_start' symbol is defined in the linker script.
11553
11554   * Stubs are generated automatically by the linker if the following
11555     two conditions are met:
11556
11557        - The address of a label is taken by means of the 'gs' modifier
11558          (short for _generate stubs_) like so:
11559               LDI r24, lo8(gs(FUNC))
11560               LDI r25, hi8(gs(FUNC))
11561        - The final location of that label is in a code segment
11562          _outside_ the segment where the stubs are located.
11563
11564   * The compiler emits such 'gs' modifiers for code labels in the
11565     following situations:
11566        - Taking address of a function or code label.
11567        - Computed goto.
11568        - If prologue-save function is used, see '-mcall-prologues'
11569          command-line option.
11570        - Switch/case dispatch tables.  If you do not want such dispatch
11571          tables you can specify the '-fno-jump-tables' command-line
11572          option.
11573        - C and C++ constructors/destructors called during
11574          startup/shutdown.
11575        - If the tools hit a 'gs()' modifier explained above.
11576
11577   * Jumping to non-symbolic addresses like so is _not_ supported:
11578
11579          int main (void)
11580          {
11581              /* Call function at word address 0x2 */
11582              return ((int(*)(void)) 0x2)();
11583          }
11584
11585     Instead, a stub has to be set up, i.e. the function has to be
11586     called through a symbol ('func_4' in the example):
11587
11588          int main (void)
11589          {
11590              extern int func_4 (void);
11591
11592              /* Call function at byte address 0x4 */
11593              return func_4();
11594          }
11595
11596     and the application be linked with '-Wl,--defsym,func_4=0x4'.
11597     Alternatively, 'func_4' can be defined in the linker script.
11598
115993.17.4.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
11600.........................................................................................
11601
11602Some AVR devices support memories larger than the 64 KiB range that can
11603be accessed with 16-bit pointers.  To access memory locations outside
11604this 64 KiB range, the contentent of a 'RAMP' register is used as high
11605part of the address: The 'X', 'Y', 'Z' address register is concatenated
11606with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register,
11607respectively, to get a wide address.  Similarly, 'RAMPD' is used
11608together with direct addressing.
11609
11610   * The startup code initializes the 'RAMP' special function registers
11611     with zero.
11612
11613   * If a *note named address space: AVR Named Address Spaces. other
11614     than generic or '__flash' is used, then 'RAMPZ' is set as needed
11615     before the operation.
11616
11617   * If the device supports RAM larger than 64  and the compiler needs
11618     to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is reset to
11619     zero after the operation.
11620
11621   * If the device comes with a specific 'RAMP' register, the ISR
11622     prologue/epilogue saves/restores that SFR and initializes it with
11623     zero in case the ISR code might (implicitly) use it.
11624
11625   * RAM larger than 64  is not supported by GCC for AVR targets.  If
11626     you use inline assembler to read from locations outside the 16-bit
11627     address range and change one of the 'RAMP' registers, you must
11628     reset it to zero after the access.
11629
116303.17.4.3 AVR Built-in Macros
11631............................
11632
11633GCC defines several built-in macros so that the user code can test for
11634the presence or absence of features.  Almost any of the following
11635built-in macros are deduced from device capabilities and thus triggered
11636by the '-mmcu=' command-line option.
11637
11638 For even more AVR-specific built-in macros see *note AVR Named Address
11639Spaces:: and *note AVR Built-in Functions::.
11640
11641'__AVR_ARCH__'
11642     Build-in macro that resolves to a decimal number that identifies
11643     the architecture and depends on the '-mmcu=MCU' option.  Possible
11644     values are:
11645
11646     '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104',
11647     '105', '106', '107'
11648
11649     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
11650     'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5',
11651     'avrxmega6', 'avrxmega7', respectively.  If MCU specifies a device,
11652     this built-in macro is set accordingly.  For example, with
11653     '-mmcu=atmega8' the macro will be defined to '4'.
11654
11655'__AVR_DEVICE__'
11656     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
11657     the device's name.  For example, '-mmcu=atmega8' defines the
11658     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
11659     '__AVR_ATtiny261A__', etc.
11660
11661     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
11662     DEVICE is the device name as from the AVR user manual.  The
11663     difference between DEVICE in the built-in macro and DEVICE in
11664     '-mmcu=DEVICE' is that the latter is always lowercase.
11665
11666     If DEVICE is not a device but only a core architecture like
11667     'avr51', this macro will not be defined.
11668
11669'__AVR_XMEGA__'
11670     The device / architecture belongs to the XMEGA family of devices.
11671
11672'__AVR_HAVE_ELPM__'
11673     The device has the the 'ELPM' instruction.
11674
11675'__AVR_HAVE_ELPMX__'
11676     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
11677
11678'__AVR_HAVE_MOVW__'
11679     The device has the 'MOVW' instruction to perform 16-bit
11680     register-register moves.
11681
11682'__AVR_HAVE_LPMX__'
11683     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
11684
11685'__AVR_HAVE_MUL__'
11686     The device has a hardware multiplier.
11687
11688'__AVR_HAVE_JMP_CALL__'
11689     The device has the 'JMP' and 'CALL' instructions.  This is the case
11690     for devices with at least 16 KiB of program memory.
11691
11692'__AVR_HAVE_EIJMP_EICALL__'
11693'__AVR_3_BYTE_PC__'
11694     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
11695     case for devices with more than 128 KiB of program memory.  This
11696     also means that the program counter (PC) is 3 bytes wide.
11697
11698'__AVR_2_BYTE_PC__'
11699     The program counter (PC) is 2 bytes wide.  This is the case for
11700     devices with up to 128 KiB of program memory.
11701
11702'__AVR_HAVE_8BIT_SP__'
11703'__AVR_HAVE_16BIT_SP__'
11704     The stack pointer (SP) register is treated as 8-bit respectively
11705     16-bit register by the compiler.  The definition of these macros is
11706     affected by '-mtiny-stack'.
11707
11708'__AVR_HAVE_SPH__'
11709'__AVR_SP8__'
11710     The device has the SPH (high part of stack pointer) special
11711     function register or has an 8-bit stack pointer, respectively.  The
11712     definition of these macros is affected by '-mmcu=' and in the cases
11713     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
11714
11715'__AVR_HAVE_RAMPD__'
11716'__AVR_HAVE_RAMPX__'
11717'__AVR_HAVE_RAMPY__'
11718'__AVR_HAVE_RAMPZ__'
11719     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
11720     function register, respectively.
11721
11722'__NO_INTERRUPTS__'
11723     This macro reflects the '-mno-interrupts' command line option.
11724
11725'__AVR_ERRATA_SKIP__'
11726'__AVR_ERRATA_SKIP_JMP_CALL__'
11727     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
11728     instructions because of a hardware erratum.  Skip instructions are
11729     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
11730     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
11731
11732'__AVR_SFR_OFFSET__=OFFSET'
11733     Instructions that can address I/O special function registers
11734     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
11735     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
11736     This offset depends on the device architecture and has to be
11737     subtracted from the RAM address in order to get the respective
11738     I/O address.
11739
11740'__WITH_AVRLIBC__'
11741     The compiler is configured to be used together with AVR-Libc.  See
11742     the '--with-avrlibc' configure option.
11743
11744
11745File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
11746
117473.17.5 Blackfin Options
11748-----------------------
11749
11750'-mcpu=CPU[-SIREVISION]'
11751     Specifies the name of the target Blackfin processor.  Currently,
11752     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
11753     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
11754     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
11755     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
11756     'bf548m', 'bf549m', 'bf561', 'bf592'.
11757
11758     The optional SIREVISION specifies the silicon revision of the
11759     target Blackfin processor.  Any workarounds available for the
11760     targeted silicon revision are enabled.  If SIREVISION is 'none', no
11761     workarounds are enabled.  If SIREVISION is 'any', all workarounds
11762     for the targeted processor are enabled.  The '__SILICON_REVISION__'
11763     macro is defined to two hexadecimal digits representing the major
11764     and minor numbers in the silicon revision.  If SIREVISION is
11765     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
11766     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
11767     this optional SIREVISION is not used, GCC assumes the latest known
11768     silicon revision of the targeted Blackfin processor.
11769
11770     GCC defines a preprocessor macro for the specified CPU.  For the
11771     'bfin-elf' toolchain, this option causes the hardware BSP provided
11772     by libgloss to be linked in if '-msim' is not given.
11773
11774     Without this option, 'bf532' is used as the processor by default.
11775
11776     Note that support for 'bf561' is incomplete.  For 'bf561', only the
11777     preprocessor macro is defined.
11778
11779'-msim'
11780     Specifies that the program will be run on the simulator.  This
11781     causes the simulator BSP provided by libgloss to be linked in.
11782     This option has effect only for 'bfin-elf' toolchain.  Certain
11783     other options, such as '-mid-shared-library' and '-mfdpic', imply
11784     '-msim'.
11785
11786'-momit-leaf-frame-pointer'
11787     Don't keep the frame pointer in a register for leaf functions.
11788     This avoids the instructions to save, set up and restore frame
11789     pointers and makes an extra register available in leaf functions.
11790     The option '-fomit-frame-pointer' removes the frame pointer for all
11791     functions, which might make debugging harder.
11792
11793'-mspecld-anomaly'
11794     When enabled, the compiler ensures that the generated code does not
11795     contain speculative loads after jump instructions.  If this option
11796     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
11797
11798'-mno-specld-anomaly'
11799     Don't generate extra code to prevent speculative loads from
11800     occurring.
11801
11802'-mcsync-anomaly'
11803     When enabled, the compiler ensures that the generated code does not
11804     contain CSYNC or SSYNC instructions too soon after conditional
11805     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
11806     is defined.
11807
11808'-mno-csync-anomaly'
11809     Don't generate extra code to prevent CSYNC or SSYNC instructions
11810     from occurring too soon after a conditional branch.
11811
11812'-mlow-64k'
11813     When enabled, the compiler is free to take advantage of the
11814     knowledge that the entire program fits into the low 64k of memory.
11815
11816'-mno-low-64k'
11817     Assume that the program is arbitrarily large.  This is the default.
11818
11819'-mstack-check-l1'
11820     Do stack checking using information placed into L1 scratchpad
11821     memory by the uClinux kernel.
11822
11823'-mid-shared-library'
11824     Generate code that supports shared libraries via the library ID
11825     method.  This allows for execute in place and shared libraries in
11826     an environment without virtual memory management.  This option
11827     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
11828     '-msim'.
11829
11830'-mno-id-shared-library'
11831     Generate code that doesn't assume ID-based shared libraries are
11832     being used.  This is the default.
11833
11834'-mleaf-id-shared-library'
11835     Generate code that supports shared libraries via the library ID
11836     method, but assumes that this library or executable won't link
11837     against any other ID shared libraries.  That allows the compiler to
11838     use faster code for jumps and calls.
11839
11840'-mno-leaf-id-shared-library'
11841     Do not assume that the code being compiled won't link against any
11842     ID shared libraries.  Slower code is generated for jump and call
11843     insns.
11844
11845'-mshared-library-id=n'
11846     Specifies the identification number of the ID-based shared library
11847     being compiled.  Specifying a value of 0 generates more compact
11848     code; specifying other values forces the allocation of that number
11849     to the current library but is no more space- or time-efficient than
11850     omitting this option.
11851
11852'-msep-data'
11853     Generate code that allows the data segment to be located in a
11854     different area of memory from the text segment.  This allows for
11855     execute in place in an environment without virtual memory
11856     management by eliminating relocations against the text section.
11857
11858'-mno-sep-data'
11859     Generate code that assumes that the data segment follows the text
11860     segment.  This is the default.
11861
11862'-mlong-calls'
11863'-mno-long-calls'
11864     Tells the compiler to perform function calls by first loading the
11865     address of the function into a register and then performing a
11866     subroutine call on this register.  This switch is needed if the
11867     target function lies outside of the 24-bit addressing range of the
11868     offset-based version of subroutine call instruction.
11869
11870     This feature is not enabled by default.  Specifying
11871     '-mno-long-calls' restores the default behavior.  Note these
11872     switches have no effect on how the compiler generates code to
11873     handle function calls via function pointers.
11874
11875'-mfast-fp'
11876     Link with the fast floating-point library.  This library relaxes
11877     some of the IEEE floating-point standard's rules for checking
11878     inputs against Not-a-Number (NAN), in the interest of performance.
11879
11880'-minline-plt'
11881     Enable inlining of PLT entries in function calls to functions that
11882     are not known to bind locally.  It has no effect without '-mfdpic'.
11883
11884'-mmulticore'
11885     Build a standalone application for multicore Blackfin processors.
11886     This option causes proper start files and link scripts supporting
11887     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
11888     can only be used with '-mcpu=bf561[-SIREVISION]'.
11889
11890     This option can be used with '-mcorea' or '-mcoreb', which selects
11891     the one-application-per-core programming model.  Without '-mcorea'
11892     or '-mcoreb', the single-application/dual-core programming model is
11893     used.  In this model, the main function of Core B should be named
11894     as 'coreb_main'.
11895
11896     If this option is not used, the single-core application programming
11897     model is used.
11898
11899'-mcorea'
11900     Build a standalone application for Core A of BF561 when using the
11901     one-application-per-core programming model.  Proper start files and
11902     link scripts are used to support Core A, and the macro
11903     '__BFIN_COREA' is defined.  This option can only be used in
11904     conjunction with '-mmulticore'.
11905
11906'-mcoreb'
11907     Build a standalone application for Core B of BF561 when using the
11908     one-application-per-core programming model.  Proper start files and
11909     link scripts are used to support Core B, and the macro
11910     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
11911     should be used instead of 'main'.  This option can only be used in
11912     conjunction with '-mmulticore'.
11913
11914'-msdram'
11915     Build a standalone application for SDRAM. Proper start files and
11916     link scripts are used to put the application into SDRAM, and the
11917     macro '__BFIN_SDRAM' is defined.  The loader should initialize
11918     SDRAM before loading the application.
11919
11920'-micplb'
11921     Assume that ICPLBs are enabled at run time.  This has an effect on
11922     certain anomaly workarounds.  For Linux targets, the default is to
11923     assume ICPLBs are enabled; for standalone applications the default
11924     is off.
11925
11926
11927File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
11928
119293.17.6 C6X Options
11930------------------
11931
11932'-march=NAME'
11933     This specifies the name of the target architecture.  GCC uses this
11934     name to determine what kind of instructions it can emit when
11935     generating assembly code.  Permissible names are: 'c62x', 'c64x',
11936     'c64x+', 'c67x', 'c67x+', 'c674x'.
11937
11938'-mbig-endian'
11939     Generate code for a big-endian target.
11940
11941'-mlittle-endian'
11942     Generate code for a little-endian target.  This is the default.
11943
11944'-msim'
11945     Choose startup files and linker script suitable for the simulator.
11946
11947'-msdata=default'
11948     Put small global and static data in the '.neardata' section, which
11949     is pointed to by register 'B14'.  Put small uninitialized global
11950     and static data in the '.bss' section, which is adjacent to the
11951     '.neardata' section.  Put small read-only data into the '.rodata'
11952     section.  The corresponding sections used for large pieces of data
11953     are '.fardata', '.far' and '.const'.
11954
11955'-msdata=all'
11956     Put all data, not just small objects, into the sections reserved
11957     for small data, and use addressing relative to the 'B14' register
11958     to access them.
11959
11960'-msdata=none'
11961     Make no use of the sections reserved for small data, and use
11962     absolute addresses to access all data.  Put all initialized global
11963     and static data in the '.fardata' section, and all uninitialized
11964     data in the '.far' section.  Put all constant data into the
11965     '.const' section.
11966
11967
11968File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
11969
119703.17.7 CRIS Options
11971-------------------
11972
11973These options are defined specifically for the CRIS ports.
11974
11975'-march=ARCHITECTURE-TYPE'
11976'-mcpu=ARCHITECTURE-TYPE'
11977     Generate code for the specified architecture.  The choices for
11978     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
11979     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
11980     cris-axis-linux-gnu, where the default is 'v10'.
11981
11982'-mtune=ARCHITECTURE-TYPE'
11983     Tune to ARCHITECTURE-TYPE everything applicable about the generated
11984     code, except for the ABI and the set of available instructions.
11985     The choices for ARCHITECTURE-TYPE are the same as for
11986     '-march=ARCHITECTURE-TYPE'.
11987
11988'-mmax-stack-frame=N'
11989     Warn when the stack frame of a function exceeds N bytes.
11990
11991'-metrax4'
11992'-metrax100'
11993     The options '-metrax4' and '-metrax100' are synonyms for
11994     '-march=v3' and '-march=v8' respectively.
11995
11996'-mmul-bug-workaround'
11997'-mno-mul-bug-workaround'
11998     Work around a bug in the 'muls' and 'mulu' instructions for CPU
11999     models where it applies.  This option is active by default.
12000
12001'-mpdebug'
12002     Enable CRIS-specific verbose debug-related information in the
12003     assembly code.  This option also has the effect of turning off the
12004     '#NO_APP' formatted-code indicator to the assembler at the
12005     beginning of the assembly file.
12006
12007'-mcc-init'
12008     Do not use condition-code results from previous instruction; always
12009     emit compare and test instructions before use of condition codes.
12010
12011'-mno-side-effects'
12012     Do not emit instructions with side effects in addressing modes
12013     other than post-increment.
12014
12015'-mstack-align'
12016'-mno-stack-align'
12017'-mdata-align'
12018'-mno-data-align'
12019'-mconst-align'
12020'-mno-const-align'
12021     These options ('no-' options) arrange (eliminate arrangements) for
12022     the stack frame, individual data and constants to be aligned for
12023     the maximum single data access size for the chosen CPU model.  The
12024     default is to arrange for 32-bit alignment.  ABI details such as
12025     structure layout are not affected by these options.
12026
12027'-m32-bit'
12028'-m16-bit'
12029'-m8-bit'
12030     Similar to the stack- data- and const-align options above, these
12031     options arrange for stack frame, writable data and constants to all
12032     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
12033     alignment.
12034
12035'-mno-prologue-epilogue'
12036'-mprologue-epilogue'
12037     With '-mno-prologue-epilogue', the normal function prologue and
12038     epilogue which set up the stack frame are omitted and no return
12039     instructions or return sequences are generated in the code.  Use
12040     this option only together with visual inspection of the compiled
12041     code: no warnings or errors are generated when call-saved registers
12042     must be saved, or storage for local variables needs to be
12043     allocated.
12044
12045'-mno-gotplt'
12046'-mgotplt'
12047     With '-fpic' and '-fPIC', don't generate (do generate) instruction
12048     sequences that load addresses for functions from the PLT part of
12049     the GOT rather than (traditional on other architectures) calls to
12050     the PLT.  The default is '-mgotplt'.
12051
12052'-melf'
12053     Legacy no-op option only recognized with the cris-axis-elf and
12054     cris-axis-linux-gnu targets.
12055
12056'-mlinux'
12057     Legacy no-op option only recognized with the cris-axis-linux-gnu
12058     target.
12059
12060'-sim'
12061     This option, recognized for the cris-axis-elf, arranges to link
12062     with input-output functions from a simulator library.  Code,
12063     initialized data and zero-initialized data are allocated
12064     consecutively.
12065
12066'-sim2'
12067     Like '-sim', but pass linker options to locate initialized data at
12068     0x40000000 and zero-initialized data at 0x80000000.
12069
12070
12071File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
12072
120733.17.8 CR16 Options
12074-------------------
12075
12076These options are defined specifically for the CR16 ports.
12077
12078'-mmac'
12079     Enable the use of multiply-accumulate instructions.  Disabled by
12080     default.
12081
12082'-mcr16cplus'
12083'-mcr16c'
12084     Generate code for CR16C or CR16C+ architecture.  CR16C+
12085     architecture is default.
12086
12087'-msim'
12088     Links the library libsim.a which is in compatible with simulator.
12089     Applicable to ELF compiler only.
12090
12091'-mint32'
12092     Choose integer type as 32-bit wide.
12093
12094'-mbit-ops'
12095     Generates 'sbit'/'cbit' instructions for bit manipulations.
12096
12097'-mdata-model=MODEL'
12098     Choose a data model.  The choices for MODEL are 'near', 'far' or
12099     'medium'.  'medium' is default.  However, 'far' is not valid with
12100     '-mcr16c', as the CR16C architecture does not support the far data
12101     model.
12102
12103
12104File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
12105
121063.17.9 Darwin Options
12107---------------------
12108
12109These options are defined for all architectures running the Darwin
12110operating system.
12111
12112 FSF GCC on Darwin does not create "fat" object files; it creates an
12113object file for the single architecture that GCC was built to target.
12114Apple's GCC on Darwin does create "fat" files if multiple '-arch'
12115options are used; it does so by running the compiler or linker multiple
12116times and joining the results together with 'lipo'.
12117
12118 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
12119is determined by the flags that specify the ISA that GCC is targeting,
12120like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
12121used to override this.
12122
12123 The Darwin tools vary in their behavior when presented with an ISA
12124mismatch.  The assembler, 'as', only permits instructions to be used
12125that are valid for the subtype of the file it is generating, so you
12126cannot put 64-bit instructions in a 'ppc750' object file.  The linker
12127for shared libraries, '/usr/bin/libtool', fails and prints an error if
12128asked to create a shared library with a less restrictive subtype than
12129its input files (for instance, trying to put a 'ppc970' object file in a
12130'ppc7400' library).  The linker for executables, 'ld', quietly gives the
12131executable the most restrictive subtype of any of its input files.
12132
12133'-FDIR'
12134     Add the framework directory DIR to the head of the list of
12135     directories to be searched for header files.  These directories are
12136     interleaved with those specified by '-I' options and are scanned in
12137     a left-to-right order.
12138
12139     A framework directory is a directory with frameworks in it.  A
12140     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
12141     directory contained directly in it that ends in '.framework'.  The
12142     name of a framework is the name of this directory excluding the
12143     '.framework'.  Headers associated with the framework are found in
12144     one of those two directories, with 'Headers' being searched first.
12145     A subframework is a framework directory that is in a framework's
12146     'Frameworks' directory.  Includes of subframework headers can only
12147     appear in a header of a framework that contains the subframework,
12148     or in a sibling subframework header.  Two subframeworks are
12149     siblings if they occur in the same framework.  A subframework
12150     should not have the same name as a framework; a warning is issued
12151     if this is violated.  Currently a subframework cannot have
12152     subframeworks; in the future, the mechanism may be extended to
12153     support this.  The standard frameworks can be found in
12154     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
12155     include looks like '#include <Framework/header.h>', where
12156     'Framework' denotes the name of the framework and 'header.h' is
12157     found in the 'PrivateHeaders' or 'Headers' directory.
12158
12159'-iframeworkDIR'
12160     Like '-F' except the directory is a treated as a system directory.
12161     The main difference between this '-iframework' and '-F' is that
12162     with '-iframework' the compiler does not warn about constructs
12163     contained within header files found via DIR.  This option is valid
12164     only for the C family of languages.
12165
12166'-gused'
12167     Emit debugging information for symbols that are used.  For stabs
12168     debugging format, this enables '-feliminate-unused-debug-symbols'.
12169     This is by default ON.
12170
12171'-gfull'
12172     Emit debugging information for all symbols and types.
12173
12174'-mmacosx-version-min=VERSION'
12175     The earliest version of MacOS X that this executable will run on is
12176     VERSION.  Typical values of VERSION include '10.1', '10.2', and
12177     '10.3.9'.
12178
12179     If the compiler was built to use the system's headers by default,
12180     then the default for this option is the system version on which the
12181     compiler is running, otherwise the default is to make choices that
12182     are compatible with as many systems and code bases as possible.
12183
12184'-mkernel'
12185     Enable kernel development mode.  The '-mkernel' option sets
12186     '-static', '-fno-common', '-fno-cxa-atexit', '-fno-exceptions',
12187     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
12188     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
12189     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
12190     targets.
12191
12192'-mone-byte-bool'
12193     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
12194     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
12195     '1' when compiling for Darwin/x86, so this option has no effect on
12196     x86.
12197
12198     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
12199     that is not binary compatible with code generated without that
12200     switch.  Using this switch may require recompiling all other
12201     modules in a program, including system libraries.  Use this switch
12202     to conform to a non-default data model.
12203
12204'-mfix-and-continue'
12205'-ffix-and-continue'
12206'-findirect-data'
12207     Generate code suitable for fast turnaround development, such as to
12208     allow GDB to dynamically load '.o' files into already-running
12209     programs.  '-findirect-data' and '-ffix-and-continue' are provided
12210     for backwards compatibility.
12211
12212'-all_load'
12213     Loads all members of static archive libraries.  See man ld(1) for
12214     more information.
12215
12216'-arch_errors_fatal'
12217     Cause the errors having to do with files that have the wrong
12218     architecture to be fatal.
12219
12220'-bind_at_load'
12221     Causes the output file to be marked such that the dynamic linker
12222     will bind all undefined references when the file is loaded or
12223     launched.
12224
12225'-bundle'
12226     Produce a Mach-o bundle format file.  See man ld(1) for more
12227     information.
12228
12229'-bundle_loader EXECUTABLE'
12230     This option specifies the EXECUTABLE that will load the build
12231     output file being linked.  See man ld(1) for more information.
12232
12233'-dynamiclib'
12234     When passed this option, GCC produces a dynamic library instead of
12235     an executable when linking, using the Darwin 'libtool' command.
12236
12237'-force_cpusubtype_ALL'
12238     This causes GCC's output file to have the ALL subtype, instead of
12239     one controlled by the '-mcpu' or '-march' option.
12240
12241'-allowable_client CLIENT_NAME'
12242'-client_name'
12243'-compatibility_version'
12244'-current_version'
12245'-dead_strip'
12246'-dependency-file'
12247'-dylib_file'
12248'-dylinker_install_name'
12249'-dynamic'
12250'-exported_symbols_list'
12251'-filelist'
12252'-flat_namespace'
12253'-force_flat_namespace'
12254'-headerpad_max_install_names'
12255'-image_base'
12256'-init'
12257'-install_name'
12258'-keep_private_externs'
12259'-multi_module'
12260'-multiply_defined'
12261'-multiply_defined_unused'
12262'-noall_load'
12263'-no_dead_strip_inits_and_terms'
12264'-nofixprebinding'
12265'-nomultidefs'
12266'-noprebind'
12267'-noseglinkedit'
12268'-pagezero_size'
12269'-prebind'
12270'-prebind_all_twolevel_modules'
12271'-private_bundle'
12272'-read_only_relocs'
12273'-sectalign'
12274'-sectobjectsymbols'
12275'-whyload'
12276'-seg1addr'
12277'-sectcreate'
12278'-sectobjectsymbols'
12279'-sectorder'
12280'-segaddr'
12281'-segs_read_only_addr'
12282'-segs_read_write_addr'
12283'-seg_addr_table'
12284'-seg_addr_table_filename'
12285'-seglinkedit'
12286'-segprot'
12287'-segs_read_only_addr'
12288'-segs_read_write_addr'
12289'-single_module'
12290'-static'
12291'-sub_library'
12292'-sub_umbrella'
12293'-twolevel_namespace'
12294'-umbrella'
12295'-undefined'
12296'-unexported_symbols_list'
12297'-weak_reference_mismatches'
12298'-whatsloaded'
12299     These options are passed to the Darwin linker.  The Darwin linker
12300     man page describes them in detail.
12301
12302
12303File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
12304
123053.17.10 DEC Alpha Options
12306-------------------------
12307
12308These '-m' options are defined for the DEC Alpha implementations:
12309
12310'-mno-soft-float'
12311'-msoft-float'
12312     Use (do not use) the hardware floating-point instructions for
12313     floating-point operations.  When '-msoft-float' is specified,
12314     functions in 'libgcc.a' are used to perform floating-point
12315     operations.  Unless they are replaced by routines that emulate the
12316     floating-point operations, or compiled in such a way as to call
12317     such emulations routines, these routines issue floating-point
12318     operations.  If you are compiling for an Alpha without
12319     floating-point operations, you must ensure that the library is
12320     built so as not to call them.
12321
12322     Note that Alpha implementations without floating-point operations
12323     are required to have floating-point registers.
12324
12325'-mfp-reg'
12326'-mno-fp-regs'
12327     Generate code that uses (does not use) the floating-point register
12328     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
12329     register set is not used, floating-point operands are passed in
12330     integer registers as if they were integers and floating-point
12331     results are passed in '$0' instead of '$f0'.  This is a
12332     non-standard calling sequence, so any function with a
12333     floating-point argument or return value called by code compiled
12334     with '-mno-fp-regs' must also be compiled with that option.
12335
12336     A typical use of this option is building a kernel that does not
12337     use, and hence need not save and restore, any floating-point
12338     registers.
12339
12340'-mieee'
12341     The Alpha architecture implements floating-point hardware optimized
12342     for maximum performance.  It is mostly compliant with the IEEE
12343     floating-point standard.  However, for full compliance, software
12344     assistance is required.  This option generates code fully
12345     IEEE-compliant code _except_ that the INEXACT-FLAG is not
12346     maintained (see below).  If this option is turned on, the
12347     preprocessor macro '_IEEE_FP' is defined during compilation.  The
12348     resulting code is less efficient but is able to correctly support
12349     denormalized numbers and exceptional IEEE values such as
12350     not-a-number and plus/minus infinity.  Other Alpha compilers call
12351     this option '-ieee_with_no_inexact'.
12352
12353'-mieee-with-inexact'
12354     This is like '-mieee' except the generated code also maintains the
12355     IEEE INEXACT-FLAG.  Turning on this option causes the generated
12356     code to implement fully-compliant IEEE math.  In addition to
12357     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
12358     On some Alpha implementations the resulting code may execute
12359     significantly slower than the code generated by default.  Since
12360     there is very little code that depends on the INEXACT-FLAG, you
12361     should normally not specify this option.  Other Alpha compilers
12362     call this option '-ieee_with_inexact'.
12363
12364'-mfp-trap-mode=TRAP-MODE'
12365     This option controls what floating-point related traps are enabled.
12366     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
12367     mode can be set to one of four values:
12368
12369     'n'
12370          This is the default (normal) setting.  The only traps that are
12371          enabled are the ones that cannot be disabled in software
12372          (e.g., division by zero trap).
12373
12374     'u'
12375          In addition to the traps enabled by 'n', underflow traps are
12376          enabled as well.
12377
12378     'su'
12379          Like 'u', but the instructions are marked to be safe for
12380          software completion (see Alpha architecture manual for
12381          details).
12382
12383     'sui'
12384          Like 'su', but inexact traps are enabled as well.
12385
12386'-mfp-rounding-mode=ROUNDING-MODE'
12387     Selects the IEEE rounding mode.  Other Alpha compilers call this
12388     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
12389
12390     'n'
12391          Normal IEEE rounding mode.  Floating-point numbers are rounded
12392          towards the nearest machine number or towards the even machine
12393          number in case of a tie.
12394
12395     'm'
12396          Round towards minus infinity.
12397
12398     'c'
12399          Chopped rounding mode.  Floating-point numbers are rounded
12400          towards zero.
12401
12402     'd'
12403          Dynamic rounding mode.  A field in the floating-point control
12404          register (FPCR, see Alpha architecture reference manual)
12405          controls the rounding mode in effect.  The C library
12406          initializes this register for rounding towards plus infinity.
12407          Thus, unless your program modifies the FPCR, 'd' corresponds
12408          to round towards plus infinity.
12409
12410'-mtrap-precision=TRAP-PRECISION'
12411     In the Alpha architecture, floating-point traps are imprecise.
12412     This means without software assistance it is impossible to recover
12413     from a floating trap and program execution normally needs to be
12414     terminated.  GCC can generate code that can assist operating system
12415     trap handlers in determining the exact location that caused a
12416     floating-point trap.  Depending on the requirements of an
12417     application, different levels of precisions can be selected:
12418
12419     'p'
12420          Program precision.  This option is the default and means a
12421          trap handler can only identify which program caused a
12422          floating-point exception.
12423
12424     'f'
12425          Function precision.  The trap handler can determine the
12426          function that caused a floating-point exception.
12427
12428     'i'
12429          Instruction precision.  The trap handler can determine the
12430          exact instruction that caused a floating-point exception.
12431
12432     Other Alpha compilers provide the equivalent options called
12433     '-scope_safe' and '-resumption_safe'.
12434
12435'-mieee-conformant'
12436     This option marks the generated code as IEEE conformant.  You must
12437     not use this option unless you also specify '-mtrap-precision=i'
12438     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
12439     effect is to emit the line '.eflag 48' in the function prologue of
12440     the generated assembly file.
12441
12442'-mbuild-constants'
12443     Normally GCC examines a 32- or 64-bit integer constant to see if it
12444     can construct it from smaller constants in two or three
12445     instructions.  If it cannot, it outputs the constant as a literal
12446     and generates code to load it from the data segment at run time.
12447
12448     Use this option to require GCC to construct _all_ integer constants
12449     using code, even if it takes more instructions (the maximum is
12450     six).
12451
12452     You typically use this option to build a shared library dynamic
12453     loader.  Itself a shared library, it must relocate itself in memory
12454     before it can find the variables and constants in its own data
12455     segment.
12456
12457'-mbwx'
12458'-mno-bwx'
12459'-mcix'
12460'-mno-cix'
12461'-mfix'
12462'-mno-fix'
12463'-mmax'
12464'-mno-max'
12465     Indicate whether GCC should generate code to use the optional BWX,
12466     CIX, FIX and MAX instruction sets.  The default is to use the
12467     instruction sets supported by the CPU type specified via '-mcpu='
12468     option or that of the CPU on which GCC was built if none is
12469     specified.
12470
12471'-mfloat-vax'
12472'-mfloat-ieee'
12473     Generate code that uses (does not use) VAX F and G floating-point
12474     arithmetic instead of IEEE single and double precision.
12475
12476'-mexplicit-relocs'
12477'-mno-explicit-relocs'
12478     Older Alpha assemblers provided no way to generate symbol
12479     relocations except via assembler macros.  Use of these macros does
12480     not allow optimal instruction scheduling.  GNU binutils as of
12481     version 2.12 supports a new syntax that allows the compiler to
12482     explicitly mark which relocations should apply to which
12483     instructions.  This option is mostly useful for debugging, as GCC
12484     detects the capabilities of the assembler when it is built and sets
12485     the default accordingly.
12486
12487'-msmall-data'
12488'-mlarge-data'
12489     When '-mexplicit-relocs' is in effect, static data is accessed via
12490     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
12491     bytes long or smaller are placed in a "small data area" (the
12492     '.sdata' and '.sbss' sections) and are accessed via 16-bit
12493     relocations off of the '$gp' register.  This limits the size of the
12494     small data area to 64KB, but allows the variables to be directly
12495     accessed via a single instruction.
12496
12497     The default is '-mlarge-data'.  With this option the data area is
12498     limited to just below 2GB.  Programs that require more than 2GB of
12499     data must use 'malloc' or 'mmap' to allocate the data in the heap
12500     instead of in the program's data segment.
12501
12502     When generating code for shared libraries, '-fpic' implies
12503     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
12504
12505'-msmall-text'
12506'-mlarge-text'
12507     When '-msmall-text' is used, the compiler assumes that the code of
12508     the entire program (or shared library) fits in 4MB, and is thus
12509     reachable with a branch instruction.  When '-msmall-data' is used,
12510     the compiler can assume that all local symbols share the same '$gp'
12511     value, and thus reduce the number of instructions required for a
12512     function call from 4 to 1.
12513
12514     The default is '-mlarge-text'.
12515
12516'-mcpu=CPU_TYPE'
12517     Set the instruction set and instruction scheduling parameters for
12518     machine type CPU_TYPE.  You can specify either the 'EV' style name
12519     or the corresponding chip number.  GCC supports scheduling
12520     parameters for the EV4, EV5 and EV6 family of processors and
12521     chooses the default values for the instruction set from the
12522     processor you specify.  If you do not specify a processor type, GCC
12523     defaults to the processor on which the compiler was built.
12524
12525     Supported values for CPU_TYPE are
12526
12527     'ev4'
12528     'ev45'
12529     '21064'
12530          Schedules as an EV4 and has no instruction set extensions.
12531
12532     'ev5'
12533     '21164'
12534          Schedules as an EV5 and has no instruction set extensions.
12535
12536     'ev56'
12537     '21164a'
12538          Schedules as an EV5 and supports the BWX extension.
12539
12540     'pca56'
12541     '21164pc'
12542     '21164PC'
12543          Schedules as an EV5 and supports the BWX and MAX extensions.
12544
12545     'ev6'
12546     '21264'
12547          Schedules as an EV6 and supports the BWX, FIX, and MAX
12548          extensions.
12549
12550     'ev67'
12551     '21264a'
12552          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
12553          extensions.
12554
12555     Native toolchains also support the value 'native', which selects
12556     the best architecture option for the host processor.
12557     '-mcpu=native' has no effect if GCC does not recognize the
12558     processor.
12559
12560'-mtune=CPU_TYPE'
12561     Set only the instruction scheduling parameters for machine type
12562     CPU_TYPE.  The instruction set is not changed.
12563
12564     Native toolchains also support the value 'native', which selects
12565     the best architecture option for the host processor.
12566     '-mtune=native' has no effect if GCC does not recognize the
12567     processor.
12568
12569'-mmemory-latency=TIME'
12570     Sets the latency the scheduler should assume for typical memory
12571     references as seen by the application.  This number is highly
12572     dependent on the memory access patterns used by the application and
12573     the size of the external cache on the machine.
12574
12575     Valid options for TIME are
12576
12577     'NUMBER'
12578          A decimal number representing clock cycles.
12579
12580     'L1'
12581     'L2'
12582     'L3'
12583     'main'
12584          The compiler contains estimates of the number of clock cycles
12585          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
12586          (also called Dcache, Scache, and Bcache), as well as to main
12587          memory.  Note that L3 is only valid for EV5.
12588
12589
12590File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
12591
125923.17.11 FR30 Options
12593--------------------
12594
12595These options are defined specifically for the FR30 port.
12596
12597'-msmall-model'
12598     Use the small address space model.  This can produce smaller code,
12599     but it does assume that all symbolic values and addresses fit into
12600     a 20-bit range.
12601
12602'-mno-lsim'
12603     Assume that runtime support has been provided and so there is no
12604     need to include the simulator library ('libsim.a') on the linker
12605     command line.
12606
12607
12608File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
12609
126103.17.12 FRV Options
12611-------------------
12612
12613'-mgpr-32'
12614
12615     Only use the first 32 general-purpose registers.
12616
12617'-mgpr-64'
12618
12619     Use all 64 general-purpose registers.
12620
12621'-mfpr-32'
12622
12623     Use only the first 32 floating-point registers.
12624
12625'-mfpr-64'
12626
12627     Use all 64 floating-point registers.
12628
12629'-mhard-float'
12630
12631     Use hardware instructions for floating-point operations.
12632
12633'-msoft-float'
12634
12635     Use library routines for floating-point operations.
12636
12637'-malloc-cc'
12638
12639     Dynamically allocate condition code registers.
12640
12641'-mfixed-cc'
12642
12643     Do not try to dynamically allocate condition code registers, only
12644     use 'icc0' and 'fcc0'.
12645
12646'-mdword'
12647
12648     Change ABI to use double word insns.
12649
12650'-mno-dword'
12651
12652     Do not use double word instructions.
12653
12654'-mdouble'
12655
12656     Use floating-point double instructions.
12657
12658'-mno-double'
12659
12660     Do not use floating-point double instructions.
12661
12662'-mmedia'
12663
12664     Use media instructions.
12665
12666'-mno-media'
12667
12668     Do not use media instructions.
12669
12670'-mmuladd'
12671
12672     Use multiply and add/subtract instructions.
12673
12674'-mno-muladd'
12675
12676     Do not use multiply and add/subtract instructions.
12677
12678'-mfdpic'
12679
12680     Select the FDPIC ABI, which uses function descriptors to represent
12681     pointers to functions.  Without any PIC/PIE-related options, it
12682     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
12683     and small data are within a 12-bit range from the GOT base address;
12684     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
12685     With a 'bfin-elf' target, this option implies '-msim'.
12686
12687'-minline-plt'
12688
12689     Enable inlining of PLT entries in function calls to functions that
12690     are not known to bind locally.  It has no effect without '-mfdpic'.
12691     It's enabled by default if optimizing for speed and compiling for
12692     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
12693     optimization option such as '-O3' or above is present in the
12694     command line.
12695
12696'-mTLS'
12697
12698     Assume a large TLS segment when generating thread-local code.
12699
12700'-mtls'
12701
12702     Do not assume a large TLS segment when generating thread-local
12703     code.
12704
12705'-mgprel-ro'
12706
12707     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
12708     that is known to be in read-only sections.  It's enabled by
12709     default, except for '-fpic' or '-fpie': even though it may help
12710     make the global offset table smaller, it trades 1 instruction for
12711     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
12712     which may be shared by multiple symbols, and it avoids the need for
12713     a GOT entry for the referenced symbol, so it's more likely to be a
12714     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
12715
12716'-multilib-library-pic'
12717
12718     Link with the (library, not FD) pic libraries.  It's implied by
12719     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
12720     '-mfdpic'.  You should never have to use it explicitly.
12721
12722'-mlinked-fp'
12723
12724     Follow the EABI requirement of always creating a frame pointer
12725     whenever a stack frame is allocated.  This option is enabled by
12726     default and can be disabled with '-mno-linked-fp'.
12727
12728'-mlong-calls'
12729
12730     Use indirect addressing to call functions outside the current
12731     compilation unit.  This allows the functions to be placed anywhere
12732     within the 32-bit address space.
12733
12734'-malign-labels'
12735
12736     Try to align labels to an 8-byte boundary by inserting NOPs into
12737     the previous packet.  This option only has an effect when VLIW
12738     packing is enabled.  It doesn't create new packets; it merely adds
12739     NOPs to existing ones.
12740
12741'-mlibrary-pic'
12742
12743     Generate position-independent EABI code.
12744
12745'-macc-4'
12746
12747     Use only the first four media accumulator registers.
12748
12749'-macc-8'
12750
12751     Use all eight media accumulator registers.
12752
12753'-mpack'
12754
12755     Pack VLIW instructions.
12756
12757'-mno-pack'
12758
12759     Do not pack VLIW instructions.
12760
12761'-mno-eflags'
12762
12763     Do not mark ABI switches in e_flags.
12764
12765'-mcond-move'
12766
12767     Enable the use of conditional-move instructions (default).
12768
12769     This switch is mainly for debugging the compiler and will likely be
12770     removed in a future version.
12771
12772'-mno-cond-move'
12773
12774     Disable the use of conditional-move instructions.
12775
12776     This switch is mainly for debugging the compiler and will likely be
12777     removed in a future version.
12778
12779'-mscc'
12780
12781     Enable the use of conditional set instructions (default).
12782
12783     This switch is mainly for debugging the compiler and will likely be
12784     removed in a future version.
12785
12786'-mno-scc'
12787
12788     Disable the use of conditional set instructions.
12789
12790     This switch is mainly for debugging the compiler and will likely be
12791     removed in a future version.
12792
12793'-mcond-exec'
12794
12795     Enable the use of conditional execution (default).
12796
12797     This switch is mainly for debugging the compiler and will likely be
12798     removed in a future version.
12799
12800'-mno-cond-exec'
12801
12802     Disable the use of conditional execution.
12803
12804     This switch is mainly for debugging the compiler and will likely be
12805     removed in a future version.
12806
12807'-mvliw-branch'
12808
12809     Run a pass to pack branches into VLIW instructions (default).
12810
12811     This switch is mainly for debugging the compiler and will likely be
12812     removed in a future version.
12813
12814'-mno-vliw-branch'
12815
12816     Do not run a pass to pack branches into VLIW instructions.
12817
12818     This switch is mainly for debugging the compiler and will likely be
12819     removed in a future version.
12820
12821'-mmulti-cond-exec'
12822
12823     Enable optimization of '&&' and '||' in conditional execution
12824     (default).
12825
12826     This switch is mainly for debugging the compiler and will likely be
12827     removed in a future version.
12828
12829'-mno-multi-cond-exec'
12830
12831     Disable optimization of '&&' and '||' in conditional execution.
12832
12833     This switch is mainly for debugging the compiler and will likely be
12834     removed in a future version.
12835
12836'-mnested-cond-exec'
12837
12838     Enable nested conditional execution optimizations (default).
12839
12840     This switch is mainly for debugging the compiler and will likely be
12841     removed in a future version.
12842
12843'-mno-nested-cond-exec'
12844
12845     Disable nested conditional execution optimizations.
12846
12847     This switch is mainly for debugging the compiler and will likely be
12848     removed in a future version.
12849
12850'-moptimize-membar'
12851
12852     This switch removes redundant 'membar' instructions from the
12853     compiler-generated code.  It is enabled by default.
12854
12855'-mno-optimize-membar'
12856
12857     This switch disables the automatic removal of redundant 'membar'
12858     instructions from the generated code.
12859
12860'-mtomcat-stats'
12861
12862     Cause gas to print out tomcat statistics.
12863
12864'-mcpu=CPU'
12865
12866     Select the processor type for which to generate code.  Possible
12867     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
12868     'fr400', 'fr300' and 'simple'.
12869
12870
12871File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
12872
128733.17.13 GNU/Linux Options
12874-------------------------
12875
12876These '-m' options are defined for GNU/Linux targets:
12877
12878'-mglibc'
12879     Use the GNU C library.  This is the default except on
12880     '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets.
12881
12882'-muclibc'
12883     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
12884     targets.
12885
12886'-mbionic'
12887     Use Bionic C library.  This is the default on '*-*-linux-*android*'
12888     targets.
12889
12890'-mandroid'
12891     Compile code compatible with Android platform.  This is the default
12892     on '*-*-linux-*android*' targets.
12893
12894     When compiling, this option enables '-mbionic', '-fPIC',
12895     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
12896     option makes the GCC driver pass Android-specific options to the
12897     linker.  Finally, this option causes the preprocessor macro
12898     '__ANDROID__' to be defined.
12899
12900'-tno-android-cc'
12901     Disable compilation effects of '-mandroid', i.e., do not enable
12902     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
12903
12904'-tno-android-ld'
12905     Disable linking effects of '-mandroid', i.e., pass standard Linux
12906     linking options to the linker.
12907
12908
12909File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
12910
129113.17.14 H8/300 Options
12912----------------------
12913
12914These '-m' options are defined for the H8/300 implementations:
12915
12916'-mrelax'
12917     Shorten some address references at link time, when possible; uses
12918     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
12919     for a fuller description.
12920
12921'-mh'
12922     Generate code for the H8/300H.
12923
12924'-ms'
12925     Generate code for the H8S.
12926
12927'-mn'
12928     Generate code for the H8S and H8/300H in the normal mode.  This
12929     switch must be used either with '-mh' or '-ms'.
12930
12931'-ms2600'
12932     Generate code for the H8S/2600.  This switch must be used with
12933     '-ms'.
12934
12935'-mexr'
12936     Extended registers are stored on stack before execution of function
12937     with monitor attribute.  Default option is '-mexr'.  This option is
12938     valid only for H8S targets.
12939
12940'-mno-exr'
12941     Extended registers are not stored on stack before execution of
12942     function with monitor attribute.  Default option is '-mno-exr'.
12943     This option is valid only for H8S targets.
12944
12945'-mint32'
12946     Make 'int' data 32 bits by default.
12947
12948'-malign-300'
12949     On the H8/300H and H8S, use the same alignment rules as for the
12950     H8/300.  The default for the H8/300H and H8S is to align longs and
12951     floats on 4-byte boundaries.  '-malign-300' causes them to be
12952     aligned on 2-byte boundaries.  This option has no effect on the
12953     H8/300.
12954
12955
12956File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
12957
129583.17.15 HPPA Options
12959--------------------
12960
12961These '-m' options are defined for the HPPA family of computers:
12962
12963'-march=ARCHITECTURE-TYPE'
12964     Generate code for the specified architecture.  The choices for
12965     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
12966     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
12967     HP-UX system to determine the proper architecture option for your
12968     machine.  Code compiled for lower numbered architectures runs on
12969     higher numbered architectures, but not the other way around.
12970
12971'-mpa-risc-1-0'
12972'-mpa-risc-1-1'
12973'-mpa-risc-2-0'
12974     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
12975     respectively.
12976
12977'-mbig-switch'
12978     Generate code suitable for big switch tables.  Use this option only
12979     if the assembler/linker complain about out-of-range branches within
12980     a switch table.
12981
12982'-mjump-in-delay'
12983     Fill delay slots of function calls with unconditional jump
12984     instructions by modifying the return pointer for the function call
12985     to be the target of the conditional jump.
12986
12987'-mdisable-fpregs'
12988     Prevent floating-point registers from being used in any manner.
12989     This is necessary for compiling kernels that perform lazy context
12990     switching of floating-point registers.  If you use this option and
12991     attempt to perform floating-point operations, the compiler aborts.
12992
12993'-mdisable-indexing'
12994     Prevent the compiler from using indexing address modes.  This
12995     avoids some rather obscure problems when compiling MIG generated
12996     code under MACH.
12997
12998'-mno-space-regs'
12999     Generate code that assumes the target has no space registers.  This
13000     allows GCC to generate faster indirect calls and use unscaled index
13001     address modes.
13002
13003     Such code is suitable for level 0 PA systems and kernels.
13004
13005'-mfast-indirect-calls'
13006     Generate code that assumes calls never cross space boundaries.
13007     This allows GCC to emit code that performs faster indirect calls.
13008
13009     This option does not work in the presence of shared libraries or
13010     nested functions.
13011
13012'-mfixed-range=REGISTER-RANGE'
13013     Generate code treating the given register range as fixed registers.
13014     A fixed register is one that the register allocator cannot use.
13015     This is useful when compiling kernel code.  A register range is
13016     specified as two registers separated by a dash.  Multiple register
13017     ranges can be specified separated by a comma.
13018
13019'-mlong-load-store'
13020     Generate 3-instruction load and store sequences as sometimes
13021     required by the HP-UX 10 linker.  This is equivalent to the '+k'
13022     option to the HP compilers.
13023
13024'-mportable-runtime'
13025     Use the portable calling conventions proposed by HP for ELF
13026     systems.
13027
13028'-mgas'
13029     Enable the use of assembler directives only GAS understands.
13030
13031'-mschedule=CPU-TYPE'
13032     Schedule code according to the constraints for the machine type
13033     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
13034     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
13035     HP-UX system to determine the proper scheduling option for your
13036     machine.  The default scheduling is '8000'.
13037
13038'-mlinker-opt'
13039     Enable the optimization pass in the HP-UX linker.  Note this makes
13040     symbolic debugging impossible.  It also triggers a bug in the HP-UX
13041     8 and HP-UX 9 linkers in which they give bogus error messages when
13042     linking some programs.
13043
13044'-msoft-float'
13045     Generate output containing library calls for floating point.
13046     *Warning:* the requisite libraries are not available for all HPPA
13047     targets.  Normally the facilities of the machine's usual C compiler
13048     are used, but this cannot be done directly in cross-compilation.
13049     You must make your own arrangements to provide suitable library
13050     functions for cross-compilation.
13051
13052     '-msoft-float' changes the calling convention in the output file;
13053     therefore, it is only useful if you compile _all_ of a program with
13054     this option.  In particular, you need to compile 'libgcc.a', the
13055     library that comes with GCC, with '-msoft-float' in order for this
13056     to work.
13057
13058'-msio'
13059     Generate the predefine, '_SIO', for server IO.  The default is
13060     '-mwsio'.  This generates the predefines, '__hp9000s700',
13061     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
13062     are available under HP-UX and HI-UX.
13063
13064'-mgnu-ld'
13065     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
13066     when building a shared library.  It is the default when GCC is
13067     configured, explicitly or implicitly, with the GNU linker.  This
13068     option does not affect which 'ld' is called; it only changes what
13069     parameters are passed to that 'ld'.  The 'ld' that is called is
13070     determined by the '--with-ld' configure option, GCC's program
13071     search path, and finally by the user's 'PATH'.  The linker used by
13072     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
13073     option is only available on the 64-bit HP-UX GCC, i.e. configured
13074     with 'hppa*64*-*-hpux*'.
13075
13076'-mhp-ld'
13077     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
13078     building a shared library and passes '+Accept TypeMismatch' to 'ld'
13079     on all links.  It is the default when GCC is configured, explicitly
13080     or implicitly, with the HP linker.  This option does not affect
13081     which 'ld' is called; it only changes what parameters are passed to
13082     that 'ld'.  The 'ld' that is called is determined by the
13083     '--with-ld' configure option, GCC's program search path, and
13084     finally by the user's 'PATH'.  The linker used by GCC can be
13085     printed using 'which `gcc -print-prog-name=ld`'.  This option is
13086     only available on the 64-bit HP-UX GCC, i.e. configured with
13087     'hppa*64*-*-hpux*'.
13088
13089'-mlong-calls'
13090     Generate code that uses long call sequences.  This ensures that a
13091     call is always able to reach linker generated stubs.  The default
13092     is to generate long calls only when the distance from the call site
13093     to the beginning of the function or translation unit, as the case
13094     may be, exceeds a predefined limit set by the branch type being
13095     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
13096     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
13097     always limited at 240,000 bytes.
13098
13099     Distances are measured from the beginning of functions when using
13100     the '-ffunction-sections' option, or when using the '-mgas' and
13101     '-mno-portable-runtime' options together under HP-UX with the SOM
13102     linker.
13103
13104     It is normally not desirable to use this option as it degrades
13105     performance.  However, it may be useful in large applications,
13106     particularly when partial linking is used to build the application.
13107
13108     The types of long calls used depends on the capabilities of the
13109     assembler and linker, and the type of code being generated.  The
13110     impact on systems that support long absolute calls, and long pic
13111     symbol-difference or pc-relative calls should be relatively small.
13112     However, an indirect call is used on 32-bit ELF systems in pic code
13113     and it is quite long.
13114
13115'-munix=UNIX-STD'
13116     Generate compiler predefines and select a startfile for the
13117     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
13118     and '98'.  '93' is supported on all HP-UX versions.  '95' is
13119     available on HP-UX 10.10 and later.  '98' is available on HP-UX
13120     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
13121     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
13122     later.
13123
13124     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
13125     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
13126     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
13127     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
13128     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
13129     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
13130
13131     It is _important_ to note that this option changes the interfaces
13132     for various library routines.  It also affects the operational
13133     behavior of the C library.  Thus, _extreme_ care is needed in using
13134     this option.
13135
13136     Library code that is intended to operate with more than one UNIX
13137     standard must test, set and restore the variable
13138     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
13139     provide this capability.
13140
13141'-nolibdld'
13142     Suppress the generation of link options to search libdld.sl when
13143     the '-static' option is specified on HP-UX 10 and later.
13144
13145'-static'
13146     The HP-UX implementation of setlocale in libc has a dependency on
13147     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
13148     when the '-static' option is specified, special link options are
13149     needed to resolve this dependency.
13150
13151     On HP-UX 10 and later, the GCC driver adds the necessary options to
13152     link with libdld.sl when the '-static' option is specified.  This
13153     causes the resulting binary to be dynamic.  On the 64-bit port, the
13154     linkers generate dynamic binaries by default in any case.  The
13155     '-nolibdld' option can be used to prevent the GCC driver from
13156     adding these link options.
13157
13158'-threads'
13159     Add support for multithreading with the "dce thread" library under
13160     HP-UX.  This option sets flags for both the preprocessor and
13161     linker.
13162
13163
13164File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
13165
131663.17.16 Intel 386 and AMD x86-64 Options
13167----------------------------------------
13168
13169These '-m' options are defined for the i386 and x86-64 family of
13170computers:
13171
13172'-march=CPU-TYPE'
13173     Generate instructions for the machine type CPU-TYPE.  In contrast
13174     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
13175     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
13176     that may not run at all on processors other than the one indicated.
13177     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
13178
13179     The choices for CPU-TYPE are:
13180
13181     'native'
13182          This selects the CPU to generate code for at compilation time
13183          by determining the processor type of the compiling machine.
13184          Using '-march=native' enables all instruction subsets
13185          supported by the local machine (hence the result might not run
13186          on different machines).  Using '-mtune=native' produces code
13187          optimized for the local machine under the constraints of the
13188          selected instruction set.
13189
13190     'i386'
13191          Original Intel i386 CPU.
13192
13193     'i486'
13194          Intel i486 CPU.  (No scheduling is implemented for this chip.)
13195
13196     'i586'
13197     'pentium'
13198          Intel Pentium CPU with no MMX support.
13199
13200     'pentium-mmx'
13201          Intel Pentium MMX CPU, based on Pentium core with MMX
13202          instruction set support.
13203
13204     'pentiumpro'
13205          Intel Pentium Pro CPU.
13206
13207     'i686'
13208          When used with '-march', the Pentium Pro instruction set is
13209          used, so the code runs on all i686 family chips.  When used
13210          with '-mtune', it has the same meaning as 'generic'.
13211
13212     'pentium2'
13213          Intel Pentium II CPU, based on Pentium Pro core with MMX
13214          instruction set support.
13215
13216     'pentium3'
13217     'pentium3m'
13218          Intel Pentium III CPU, based on Pentium Pro core with MMX and
13219          SSE instruction set support.
13220
13221     'pentium-m'
13222          Intel Pentium M; low-power version of Intel Pentium III CPU
13223          with MMX, SSE and SSE2 instruction set support.  Used by
13224          Centrino notebooks.
13225
13226     'pentium4'
13227     'pentium4m'
13228          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
13229          support.
13230
13231     'prescott'
13232          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
13233          and SSE3 instruction set support.
13234
13235     'nocona'
13236          Improved version of Intel Pentium 4 CPU with 64-bit
13237          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
13238
13239     'core2'
13240          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13241          and SSSE3 instruction set support.
13242
13243     'corei7'
13244          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13245          SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
13246
13247     'corei7-avx'
13248          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13249          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
13250          set support.
13251
13252     'core-avx-i'
13253          Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
13254          SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
13255          F16C instruction set support.
13256
13257     'core-avx2'
13258          Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
13259          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE,
13260          RDRND, FMA, BMI, BMI2 and F16C instruction set support.
13261
13262     'atom'
13263          Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
13264          SSE3 and SSSE3 instruction set support.
13265
13266     'k6'
13267          AMD K6 CPU with MMX instruction set support.
13268
13269     'k6-2'
13270     'k6-3'
13271          Improved versions of AMD K6 CPU with MMX and 3DNow!
13272          instruction set support.
13273
13274     'athlon'
13275     'athlon-tbird'
13276          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
13277          prefetch instructions support.
13278
13279     'athlon-4'
13280     'athlon-xp'
13281     'athlon-mp'
13282          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
13283          full SSE instruction set support.
13284
13285     'k8'
13286     'opteron'
13287     'athlon64'
13288     'athlon-fx'
13289          Processors based on the AMD K8 core with x86-64 instruction
13290          set support, including the AMD Opteron, Athlon 64, and Athlon
13291          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
13292          enhanced 3DNow! and 64-bit instruction set extensions.)
13293
13294     'k8-sse3'
13295     'opteron-sse3'
13296     'athlon64-sse3'
13297          Improved versions of AMD K8 cores with SSE3 instruction set
13298          support.
13299
13300     'amdfam10'
13301     'barcelona'
13302          CPUs based on AMD Family 10h cores with x86-64 instruction set
13303          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
13304          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
13305
13306     'bdver1'
13307          CPUs based on AMD Family 15h cores with x86-64 instruction set
13308          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
13309          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
13310          and 64-bit instruction set extensions.)
13311     'bdver2'
13312          AMD Family 15h core based CPUs with x86-64 instruction set
13313          support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13314          AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13315          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
13316     'bdver3'
13317          AMD Family 15h core based CPUs with x86-64 instruction set
13318          support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13319          AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13320          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.
13321
13322     'btver1'
13323          CPUs based on AMD Family 14h cores with x86-64 instruction set
13324          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
13325          CX16, ABM and 64-bit instruction set extensions.)
13326
13327     'btver2'
13328          CPUs based on AMD Family 16h cores with x86-64 instruction set
13329          support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
13330          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
13331          and 64-bit instruction set extensions.
13332
13333     'winchip-c6'
13334          IDT WinChip C6 CPU, dealt in same way as i486 with additional
13335          MMX instruction set support.
13336
13337     'winchip2'
13338          IDT WinChip 2 CPU, dealt in same way as i486 with additional
13339          MMX and 3DNow! instruction set support.
13340
13341     'c3'
13342          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
13343          scheduling is implemented for this chip.)
13344
13345     'c3-2'
13346          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
13347          support.  (No scheduling is implemented for this chip.)
13348
13349     'geode'
13350          AMD Geode embedded processor with MMX and 3DNow! instruction
13351          set support.
13352
13353'-mtune=CPU-TYPE'
13354     Tune to CPU-TYPE everything applicable about the generated code,
13355     except for the ABI and the set of available instructions.  While
13356     picking a specific CPU-TYPE schedules things appropriately for that
13357     particular chip, the compiler does not generate any code that
13358     cannot run on the default machine type unless you use a
13359     '-march=CPU-TYPE' option.  For example, if GCC is configured for
13360     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
13361     tuned for Pentium 4 but still runs on i686 machines.
13362
13363     The choices for CPU-TYPE are the same as for '-march'.  In
13364     addition, '-mtune' supports an extra choice for CPU-TYPE:
13365
13366     'generic'
13367          Produce code optimized for the most common IA32/AMD64/EM64T
13368          processors.  If you know the CPU on which your code will run,
13369          then you should use the corresponding '-mtune' or '-march'
13370          option instead of '-mtune=generic'.  But, if you do not know
13371          exactly what CPU users of your application will have, then you
13372          should use this option.
13373
13374          As new processors are deployed in the marketplace, the
13375          behavior of this option will change.  Therefore, if you
13376          upgrade to a newer version of GCC, code generation controlled
13377          by this option will change to reflect the processors that are
13378          most common at the time that version of GCC is released.
13379
13380          There is no '-march=generic' option because '-march' indicates
13381          the instruction set the compiler can use, and there is no
13382          generic instruction set applicable to all processors.  In
13383          contrast, '-mtune' indicates the processor (or, in this case,
13384          collection of processors) for which the code is optimized.
13385
13386'-mcpu=CPU-TYPE'
13387     A deprecated synonym for '-mtune'.
13388
13389'-mfpmath=UNIT'
13390     Generate floating-point arithmetic for selected unit UNIT.  The
13391     choices for UNIT are:
13392
13393     '387'
13394          Use the standard 387 floating-point coprocessor present on the
13395          majority of chips and emulated otherwise.  Code compiled with
13396          this option runs almost everywhere.  The temporary results are
13397          computed in 80-bit precision instead of the precision
13398          specified by the type, resulting in slightly different results
13399          compared to most of other chips.  See '-ffloat-store' for more
13400          detailed description.
13401
13402          This is the default choice for i386 compiler.
13403
13404     'sse'
13405          Use scalar floating-point instructions present in the SSE
13406          instruction set.  This instruction set is supported by Pentium
13407          III and newer chips, and in the AMD line by Athlon-4, Athlon
13408          XP and Athlon MP chips.  The earlier version of the SSE
13409          instruction set supports only single-precision arithmetic,
13410          thus the double and extended-precision arithmetic are still
13411          done using 387.  A later version, present only in Pentium 4
13412          and AMD x86-64 chips, supports double-precision arithmetic
13413          too.
13414
13415          For the i386 compiler, you must use '-march=CPU-TYPE', '-msse'
13416          or '-msse2' switches to enable SSE extensions and make this
13417          option effective.  For the x86-64 compiler, these extensions
13418          are enabled by default.
13419
13420          The resulting code should be considerably faster in the
13421          majority of cases and avoid the numerical instability problems
13422          of 387 code, but may break some existing code that expects
13423          temporaries to be 80 bits.
13424
13425          This is the default choice for the x86-64 compiler.
13426
13427     'sse,387'
13428     'sse+387'
13429     'both'
13430          Attempt to utilize both instruction sets at once.  This
13431          effectively doubles the amount of available registers, and on
13432          chips with separate execution units for 387 and SSE the
13433          execution resources too.  Use this option with care, as it is
13434          still experimental, because the GCC register allocator does
13435          not model separate functional units well, resulting in
13436          unstable performance.
13437
13438'-masm=DIALECT'
13439     Output assembly instructions using selected DIALECT.  Supported
13440     choices are 'intel' or 'att' (the default).  Darwin does not
13441     support 'intel'.
13442
13443'-mieee-fp'
13444'-mno-ieee-fp'
13445     Control whether or not the compiler uses IEEE floating-point
13446     comparisons.  These correctly handle the case where the result of a
13447     comparison is unordered.
13448
13449'-msoft-float'
13450     Generate output containing library calls for floating point.
13451
13452     *Warning:* the requisite libraries are not part of GCC.  Normally
13453     the facilities of the machine's usual C compiler are used, but this
13454     can't be done directly in cross-compilation.  You must make your
13455     own arrangements to provide suitable library functions for
13456     cross-compilation.
13457
13458     On machines where a function returns floating-point results in the
13459     80387 register stack, some floating-point opcodes may be emitted
13460     even if '-msoft-float' is used.
13461
13462'-mno-fp-ret-in-387'
13463     Do not use the FPU registers for return values of functions.
13464
13465     The usual calling convention has functions return values of types
13466     'float' and 'double' in an FPU register, even if there is no FPU.
13467     The idea is that the operating system should emulate an FPU.
13468
13469     The option '-mno-fp-ret-in-387' causes such values to be returned
13470     in ordinary CPU registers instead.
13471
13472'-mno-fancy-math-387'
13473     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
13474     instructions for the 387.  Specify this option to avoid generating
13475     those instructions.  This option is the default on FreeBSD, OpenBSD
13476     and NetBSD.  This option is overridden when '-march' indicates that
13477     the target CPU always has an FPU and so the instruction does not
13478     need emulation.  These instructions are not generated unless you
13479     also use the '-funsafe-math-optimizations' switch.
13480
13481'-malign-double'
13482'-mno-align-double'
13483     Control whether GCC aligns 'double', 'long double', and 'long long'
13484     variables on a two-word boundary or a one-word boundary.  Aligning
13485     'double' variables on a two-word boundary produces code that runs
13486     somewhat faster on a Pentium at the expense of more memory.
13487
13488     On x86-64, '-malign-double' is enabled by default.
13489
13490     *Warning:* if you use the '-malign-double' switch, structures
13491     containing the above types are aligned differently than the
13492     published application binary interface specifications for the 386
13493     and are not binary compatible with structures in code compiled
13494     without that switch.
13495
13496'-m96bit-long-double'
13497'-m128bit-long-double'
13498     These switches control the size of 'long double' type.  The i386
13499     application binary interface specifies the size to be 96 bits, so
13500     '-m96bit-long-double' is the default in 32-bit mode.
13501
13502     Modern architectures (Pentium and newer) prefer 'long double' to be
13503     aligned to an 8- or 16-byte boundary.  In arrays or structures
13504     conforming to the ABI, this is not possible.  So specifying
13505     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
13506     by padding the 'long double' with an additional 32-bit zero.
13507
13508     In the x86-64 compiler, '-m128bit-long-double' is the default
13509     choice as its ABI specifies that 'long double' is aligned on
13510     16-byte boundary.
13511
13512     Notice that neither of these options enable any extra precision
13513     over the x87 standard of 80 bits for a 'long double'.
13514
13515     *Warning:* if you override the default value for your target ABI,
13516     this changes the size of structures and arrays containing 'long
13517     double' variables, as well as modifying the function calling
13518     convention for functions taking 'long double'.  Hence they are not
13519     binary-compatible with code compiled without that switch.
13520
13521'-mlong-double-64'
13522'-mlong-double-80'
13523     These switches control the size of 'long double' type.  A size of
13524     64 bits makes the 'long double' type equivalent to the 'double'
13525     type.  This is the default for Bionic C library.
13526
13527     *Warning:* if you override the default value for your target ABI,
13528     this changes the size of structures and arrays containing 'long
13529     double' variables, as well as modifying the function calling
13530     convention for functions taking 'long double'.  Hence they are not
13531     binary-compatible with code compiled without that switch.
13532
13533'-mlarge-data-threshold=THRESHOLD'
13534     When '-mcmodel=medium' is specified, data objects larger than
13535     THRESHOLD are placed in the large data section.  This value must be
13536     the same across all objects linked into the binary, and defaults to
13537     65535.
13538
13539'-mrtd'
13540     Use a different function-calling convention, in which functions
13541     that take a fixed number of arguments return with the 'ret NUM'
13542     instruction, which pops their arguments while returning.  This
13543     saves one instruction in the caller since there is no need to pop
13544     the arguments there.
13545
13546     You can specify that an individual function is called with this
13547     calling sequence with the function attribute 'stdcall'.  You can
13548     also override the '-mrtd' option by using the function attribute
13549     'cdecl'.  *Note Function Attributes::.
13550
13551     *Warning:* this calling convention is incompatible with the one
13552     normally used on Unix, so you cannot use it if you need to call
13553     libraries compiled with the Unix compiler.
13554
13555     Also, you must provide function prototypes for all functions that
13556     take variable numbers of arguments (including 'printf'); otherwise
13557     incorrect code is generated for calls to those functions.
13558
13559     In addition, seriously incorrect code results if you call a
13560     function with too many arguments.  (Normally, extra arguments are
13561     harmlessly ignored.)
13562
13563'-mregparm=NUM'
13564     Control how many registers are used to pass integer arguments.  By
13565     default, no registers are used to pass arguments, and at most 3
13566     registers can be used.  You can control this behavior for a
13567     specific function by using the function attribute 'regparm'.  *Note
13568     Function Attributes::.
13569
13570     *Warning:* if you use this switch, and NUM is nonzero, then you
13571     must build all modules with the same value, including any
13572     libraries.  This includes the system libraries and startup modules.
13573
13574'-msseregparm'
13575     Use SSE register passing conventions for float and double arguments
13576     and return values.  You can control this behavior for a specific
13577     function by using the function attribute 'sseregparm'.  *Note
13578     Function Attributes::.
13579
13580     *Warning:* if you use this switch then you must build all modules
13581     with the same value, including any libraries.  This includes the
13582     system libraries and startup modules.
13583
13584'-mvect8-ret-in-mem'
13585     Return 8-byte vectors in memory instead of MMX registers.  This is
13586     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
13587     Sun Studio compilers until version 12.  Later compiler versions
13588     (starting with Studio 12 Update 1) follow the ABI used by other x86
13589     targets, which is the default on Solaris 10 and later.  _Only_ use
13590     this option if you need to remain compatible with existing code
13591     produced by those previous compiler versions or older versions of
13592     GCC.
13593
13594'-mpc32'
13595'-mpc64'
13596'-mpc80'
13597
13598     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
13599     '-mpc32' is specified, the significands of results of
13600     floating-point operations are rounded to 24 bits (single
13601     precision); '-mpc64' rounds the significands of results of
13602     floating-point operations to 53 bits (double precision) and
13603     '-mpc80' rounds the significands of results of floating-point
13604     operations to 64 bits (extended double precision), which is the
13605     default.  When this option is used, floating-point operations in
13606     higher precisions are not available to the programmer without
13607     setting the FPU control word explicitly.
13608
13609     Setting the rounding of floating-point operations to less than the
13610     default 80 bits can speed some programs by 2% or more.  Note that
13611     some mathematical libraries assume that extended-precision (80-bit)
13612     floating-point operations are enabled by default; routines in such
13613     libraries could suffer significant loss of accuracy, typically
13614     through so-called "catastrophic cancellation", when this option is
13615     used to set the precision to less than extended precision.
13616
13617'-mstackrealign'
13618     Realign the stack at entry.  On the Intel x86, the '-mstackrealign'
13619     option generates an alternate prologue and epilogue that realigns
13620     the run-time stack if necessary.  This supports mixing legacy codes
13621     that keep 4-byte stack alignment with modern codes that keep
13622     16-byte stack alignment for SSE compatibility.  See also the
13623     attribute 'force_align_arg_pointer', applicable to individual
13624     functions.
13625
13626'-mpreferred-stack-boundary=NUM'
13627     Attempt to keep the stack boundary aligned to a 2 raised to NUM
13628     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
13629     the default is 4 (16 bytes or 128 bits).
13630
13631     *Warning:* When generating code for the x86-64 architecture with
13632     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
13633     to keep the stack boundary aligned to 8 byte boundary.  Since
13634     x86-64 ABI require 16 byte stack alignment, this is ABI
13635     incompatible and intended to be used in controlled environment
13636     where stack space is important limitation.  This option will lead
13637     to wrong code when functions compiled with 16 byte stack alignment
13638     (such as functions from a standard library) are called with
13639     misaligned stack.  In this case, SSE instructions may lead to
13640     misaligned memory access traps.  In addition, variable arguments
13641     will be handled incorrectly for 16 byte aligned objects (including
13642     x87 long double and __int128), leading to wrong results.  You must
13643     build all modules with '-mpreferred-stack-boundary=3', including
13644     any libraries.  This includes the system libraries and startup
13645     modules.
13646
13647'-mincoming-stack-boundary=NUM'
13648     Assume the incoming stack is aligned to a 2 raised to NUM byte
13649     boundary.  If '-mincoming-stack-boundary' is not specified, the one
13650     specified by '-mpreferred-stack-boundary' is used.
13651
13652     On Pentium and Pentium Pro, 'double' and 'long double' values
13653     should be aligned to an 8-byte boundary (see '-malign-double') or
13654     suffer significant run time performance penalties.  On Pentium III,
13655     the Streaming SIMD Extension (SSE) data type '__m128' may not work
13656     properly if it is not 16-byte aligned.
13657
13658     To ensure proper alignment of this values on the stack, the stack
13659     boundary must be as aligned as that required by any value stored on
13660     the stack.  Further, every function must be generated such that it
13661     keeps the stack aligned.  Thus calling a function compiled with a
13662     higher preferred stack boundary from a function compiled with a
13663     lower preferred stack boundary most likely misaligns the stack.  It
13664     is recommended that libraries that use callbacks always use the
13665     default setting.
13666
13667     This extra alignment does consume extra stack space, and generally
13668     increases code size.  Code that is sensitive to stack space usage,
13669     such as embedded systems and operating system kernels, may want to
13670     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
13671
13672'-mmmx'
13673'-mno-mmx'
13674'-msse'
13675'-mno-sse'
13676'-msse2'
13677'-mno-sse2'
13678'-msse3'
13679'-mno-sse3'
13680'-mssse3'
13681'-mno-ssse3'
13682'-msse4.1'
13683'-mno-sse4.1'
13684'-msse4.2'
13685'-mno-sse4.2'
13686'-msse4'
13687'-mno-sse4'
13688'-mavx'
13689'-mno-avx'
13690'-mavx2'
13691'-mno-avx2'
13692'-maes'
13693'-mno-aes'
13694'-mpclmul'
13695'-mno-pclmul'
13696'-mfsgsbase'
13697'-mno-fsgsbase'
13698'-mrdrnd'
13699'-mno-rdrnd'
13700'-mf16c'
13701'-mno-f16c'
13702'-mfma'
13703'-mno-fma'
13704'-msse4a'
13705'-mno-sse4a'
13706'-mfma4'
13707'-mno-fma4'
13708'-mxop'
13709'-mno-xop'
13710'-mlwp'
13711'-mno-lwp'
13712'-m3dnow'
13713'-mno-3dnow'
13714'-mpopcnt'
13715'-mno-popcnt'
13716'-mabm'
13717'-mno-abm'
13718'-mbmi'
13719'-mbmi2'
13720'-mno-bmi'
13721'-mno-bmi2'
13722'-mlzcnt'
13723'-mno-lzcnt'
13724'-mrtm'
13725'-mtbm'
13726'-mno-tbm'
13727     These switches enable or disable the use of instructions in the
13728     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
13729     FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
13730     LZCNT, RTM or 3DNow! extended instruction sets.  These extensions
13731     are also available as built-in functions: see *note X86 Built-in
13732     Functions::, for details of the functions enabled and disabled by
13733     these switches.
13734
13735     To generate SSE/SSE2 instructions automatically from floating-point
13736     code (as opposed to 387 instructions), see '-mfpmath=sse'.
13737
13738     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
13739     generates new AVX instructions or AVX equivalence for all SSEx
13740     instructions when needed.
13741
13742     These options enable GCC to use these extended instructions in
13743     generated code, even without '-mfpmath=sse'.  Applications that
13744     perform run-time CPU detection must compile separate files for each
13745     supported architecture, using the appropriate flags.  In
13746     particular, the file containing the CPU detection code should be
13747     compiled without these options.
13748
13749'-mcld'
13750     This option instructs GCC to emit a 'cld' instruction in the
13751     prologue of functions that use string instructions.  String
13752     instructions depend on the DF flag to select between autoincrement
13753     or autodecrement mode.  While the ABI specifies the DF flag to be
13754     cleared on function entry, some operating systems violate this
13755     specification by not clearing the DF flag in their exception
13756     dispatchers.  The exception handler can be invoked with the DF flag
13757     set, which leads to wrong direction mode when string instructions
13758     are used.  This option can be enabled by default on 32-bit x86
13759     targets by configuring GCC with the '--enable-cld' configure
13760     option.  Generation of 'cld' instructions can be suppressed with
13761     the '-mno-cld' compiler option in this case.
13762
13763'-mvzeroupper'
13764     This option instructs GCC to emit a 'vzeroupper' instruction before
13765     a transfer of control flow out of the function to minimize the AVX
13766     to SSE transition penalty as well as remove unnecessary 'zeroupper'
13767     intrinsics.
13768
13769'-mprefer-avx128'
13770     This option instructs GCC to use 128-bit AVX instructions instead
13771     of 256-bit AVX instructions in the auto-vectorizer.
13772
13773'-mcx16'
13774     This option enables GCC to generate 'CMPXCHG16B' instructions.
13775     'CMPXCHG16B' allows for atomic operations on 128-bit double
13776     quadword (or oword) data types.  This is useful for high-resolution
13777     counters that can be updated by multiple processors (or cores).
13778     This instruction is generated as part of atomic built-in functions:
13779     see *note __sync Builtins:: or *note __atomic Builtins:: for
13780     details.
13781
13782'-msahf'
13783     This option enables generation of 'SAHF' instructions in 64-bit
13784     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
13785     the introduction of Pentium 4 G1 step in December 2005, lacked the
13786     'LAHF' and 'SAHF' instructions which were supported by AMD64.
13787     These are load and store instructions, respectively, for certain
13788     status flags.  In 64-bit mode, the 'SAHF' instruction is used to
13789     optimize 'fmod', 'drem', and 'remainder' built-in functions; see
13790     *note Other Builtins:: for details.
13791
13792'-mmovbe'
13793     This option enables use of the 'movbe' instruction to implement
13794     '__builtin_bswap32' and '__builtin_bswap64'.
13795
13796'-mcrc32'
13797     This option enables built-in functions '__builtin_ia32_crc32qi',
13798     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
13799     '__builtin_ia32_crc32di' to generate the 'crc32' machine
13800     instruction.
13801
13802'-mrecip'
13803     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
13804     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
13805     Newton-Raphson step to increase precision instead of 'DIVSS' and
13806     'SQRTSS' (and their vectorized variants) for single-precision
13807     floating-point arguments.  These instructions are generated only
13808     when '-funsafe-math-optimizations' is enabled together with
13809     '-finite-math-only' and '-fno-trapping-math'.  Note that while the
13810     throughput of the sequence is higher than the throughput of the
13811     non-reciprocal instruction, the precision of the sequence can be
13812     decreased by up to 2 ulp (i.e.  the inverse of 1.0 equals
13813     0.99999994).
13814
13815     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
13816     'RSQRTPS') already with '-ffast-math' (or the above option
13817     combination), and doesn't need '-mrecip'.
13818
13819     Also note that GCC emits the above sequence with additional
13820     Newton-Raphson step for vectorized single-float division and
13821     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
13822     option combination), and doesn't need '-mrecip'.
13823
13824'-mrecip=OPT'
13825     This option controls which reciprocal estimate instructions may be
13826     used.  OPT is a comma-separated list of options, which may be
13827     preceded by a '!' to invert the option:
13828
13829     'all'
13830          Enable all estimate instructions.
13831
13832     'default'
13833          Enable the default instructions, equivalent to '-mrecip'.
13834
13835     'none'
13836          Disable all estimate instructions, equivalent to '-mno-recip'.
13837
13838     'div'
13839          Enable the approximation for scalar division.
13840
13841     'vec-div'
13842          Enable the approximation for vectorized division.
13843
13844     'sqrt'
13845          Enable the approximation for scalar square root.
13846
13847     'vec-sqrt'
13848          Enable the approximation for vectorized square root.
13849
13850     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
13851     approximations, except for square root.
13852
13853'-mveclibabi=TYPE'
13854     Specifies the ABI type to use for vectorizing intrinsics using an
13855     external library.  Supported values for TYPE are 'svml' for the
13856     Intel short vector math library and 'acml' for the AMD math core
13857     library.  To use this option, both '-ftree-vectorize' and
13858     '-funsafe-math-optimizations' have to be enabled, and an SVML or
13859     ACML ABI-compatible library must be specified at link time.
13860
13861     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
13862     'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2',
13863     'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2',
13864     'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2',
13865     'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4',
13866     'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4',
13867     'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4',
13868     'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function
13869     type when '-mveclibabi=svml' is used, and '__vrd2_sin',
13870     '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2',
13871     '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf',
13872     '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf'
13873     for the corresponding function type when '-mveclibabi=acml' is
13874     used.
13875
13876'-mabi=NAME'
13877     Generate code for the specified calling convention.  Permissible
13878     values are 'sysv' for the ABI used on GNU/Linux and other systems,
13879     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
13880     ABI when targeting Microsoft Windows and the SysV ABI on all other
13881     systems.  You can control this behavior for a specific function by
13882     using the function attribute 'ms_abi'/'sysv_abi'.  *Note Function
13883     Attributes::.
13884
13885'-mtls-dialect=TYPE'
13886     Generate code to access thread-local storage using the 'gnu' or
13887     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
13888     more efficient, but it may add compile- and run-time requirements
13889     that cannot be satisfied on all systems.
13890
13891'-mpush-args'
13892'-mno-push-args'
13893     Use PUSH operations to store outgoing parameters.  This method is
13894     shorter and usually equally fast as method using SUB/MOV operations
13895     and is enabled by default.  In some cases disabling it may improve
13896     performance because of improved scheduling and reduced
13897     dependencies.
13898
13899'-maccumulate-outgoing-args'
13900     If enabled, the maximum amount of space required for outgoing
13901     arguments is computed in the function prologue.  This is faster on
13902     most modern CPUs because of reduced dependencies, improved
13903     scheduling and reduced stack usage when the preferred stack
13904     boundary is not equal to 2.  The drawback is a notable increase in
13905     code size.  This switch implies '-mno-push-args'.
13906
13907'-mthreads'
13908     Support thread-safe exception handling on MinGW. Programs that rely
13909     on thread-safe exception handling must compile and link all code
13910     with the '-mthreads' option.  When compiling, '-mthreads' defines
13911     '-D_MT'; when linking, it links in a special thread helper library
13912     '-lmingwthrd' which cleans up per-thread exception-handling data.
13913
13914'-mno-align-stringops'
13915     Do not align the destination of inlined string operations.  This
13916     switch reduces code size and improves performance in case the
13917     destination is already aligned, but GCC doesn't know about it.
13918
13919'-minline-all-stringops'
13920     By default GCC inlines string operations only when the destination
13921     is known to be aligned to least a 4-byte boundary.  This enables
13922     more inlining and increases code size, but may improve performance
13923     of code that depends on fast 'memcpy', 'strlen', and 'memset' for
13924     short lengths.
13925
13926'-minline-stringops-dynamically'
13927     For string operations of unknown size, use run-time checks with
13928     inline code for small blocks and a library call for large blocks.
13929
13930'-mstringop-strategy=ALG'
13931     Override the internal decision heuristic for the particular
13932     algorithm to use for inlining string operations.  The allowed
13933     values for ALG are:
13934
13935     'rep_byte'
13936     'rep_4byte'
13937     'rep_8byte'
13938          Expand using i386 'rep' prefix of the specified size.
13939
13940     'byte_loop'
13941     'loop'
13942     'unrolled_loop'
13943          Expand into an inline loop.
13944
13945     'libcall'
13946          Always use a library call.
13947
13948'-momit-leaf-frame-pointer'
13949     Don't keep the frame pointer in a register for leaf functions.
13950     This avoids the instructions to save, set up, and restore frame
13951     pointers and makes an extra register available in leaf functions.
13952     The option '-fomit-leaf-frame-pointer' removes the frame pointer
13953     for leaf functions, which might make debugging harder.
13954
13955'-mtls-direct-seg-refs'
13956'-mno-tls-direct-seg-refs'
13957     Controls whether TLS variables may be accessed with offsets from
13958     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
13959     whether the thread base pointer must be added.  Whether or not this
13960     is valid depends on the operating system, and whether it maps the
13961     segment to cover the entire TLS area.
13962
13963     For systems that use the GNU C Library, the default is on.
13964
13965'-msse2avx'
13966'-mno-sse2avx'
13967     Specify that the assembler should encode SSE instructions with VEX
13968     prefix.  The option '-mavx' turns this on by default.
13969
13970'-mfentry'
13971'-mno-fentry'
13972     If profiling is active ('-pg'), put the profiling counter call
13973     before the prologue.  Note: On x86 architectures the attribute
13974     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
13975     '-pg'.
13976
13977'-m8bit-idiv'
13978'-mno-8bit-idiv'
13979     On some processors, like Intel Atom, 8-bit unsigned integer divide
13980     is much faster than 32-bit/64-bit integer divide.  This option
13981     generates a run-time check.  If both dividend and divisor are
13982     within range of 0 to 255, 8-bit unsigned integer divide is used
13983     instead of 32-bit/64-bit integer divide.
13984
13985'-mavx256-split-unaligned-load'
13986'-mavx256-split-unaligned-store'
13987     Split 32-byte AVX unaligned load and store.
13988
13989 These '-m' switches are supported in addition to the above on x86-64
13990processors in 64-bit environments.
13991
13992'-m32'
13993'-m64'
13994'-mx32'
13995     Generate code for a 32-bit or 64-bit environment.  The '-m32'
13996     option sets 'int', 'long', and pointer types to 32 bits, and
13997     generates code that runs on any i386 system.
13998
13999     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
14000     types to 64 bits, and generates code for the x86-64 architecture.
14001     For Darwin only the '-m64' option also turns off the '-fno-pic' and
14002     '-mdynamic-no-pic' options.
14003
14004     The '-mx32' option sets 'int', 'long', and pointer types to 32
14005     bits, and generates code for the x86-64 architecture.
14006
14007'-mno-red-zone'
14008     Do not use a so-called "red zone" for x86-64 code.  The red zone is
14009     mandated by the x86-64 ABI; it is a 128-byte area beyond the
14010     location of the stack pointer that is not modified by signal or
14011     interrupt handlers and therefore can be used for temporary data
14012     without adjusting the stack pointer.  The flag '-mno-red-zone'
14013     disables this red zone.
14014
14015'-mcmodel=small'
14016     Generate code for the small code model: the program and its symbols
14017     must be linked in the lower 2 GB of the address space.  Pointers
14018     are 64 bits.  Programs can be statically or dynamically linked.
14019     This is the default code model.
14020
14021'-mcmodel=kernel'
14022     Generate code for the kernel code model.  The kernel runs in the
14023     negative 2 GB of the address space.  This model has to be used for
14024     Linux kernel code.
14025
14026'-mcmodel=medium'
14027     Generate code for the medium model: the program is linked in the
14028     lower 2 GB of the address space.  Small symbols are also placed
14029     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
14030     put into large data or BSS sections and can be located above 2GB.
14031     Programs can be statically or dynamically linked.
14032
14033'-mcmodel=large'
14034     Generate code for the large model.  This model makes no assumptions
14035     about addresses and sizes of sections.
14036
14037'-maddress-mode=long'
14038     Generate code for long address mode.  This is only supported for
14039     64-bit and x32 environments.  It is the default address mode for
14040     64-bit environments.
14041
14042'-maddress-mode=short'
14043     Generate code for short address mode.  This is only supported for
14044     32-bit and x32 environments.  It is the default address mode for
14045     32-bit and x32 environments.
14046
14047
14048File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
14049
140503.17.17 i386 and x86-64 Windows Options
14051---------------------------------------
14052
14053These additional options are available for Microsoft Windows targets:
14054
14055'-mconsole'
14056     This option specifies that a console application is to be
14057     generated, by instructing the linker to set the PE header subsystem
14058     type required for console applications.  This option is available
14059     for Cygwin and MinGW targets and is enabled by default on those
14060     targets.
14061
14062'-mdll'
14063     This option is available for Cygwin and MinGW targets.  It
14064     specifies that a DLL--a dynamic link library--is to be generated,
14065     enabling the selection of the required runtime startup object and
14066     entry point.
14067
14068'-mnop-fun-dllimport'
14069     This option is available for Cygwin and MinGW targets.  It
14070     specifies that the 'dllimport' attribute should be ignored.
14071
14072'-mthread'
14073     This option is available for MinGW targets.  It specifies that
14074     MinGW-specific thread support is to be used.
14075
14076'-municode'
14077     This option is available for MinGW-w64 targets.  It causes the
14078     'UNICODE' preprocessor macro to be predefined, and chooses
14079     Unicode-capable runtime startup code.
14080
14081'-mwin32'
14082     This option is available for Cygwin and MinGW targets.  It
14083     specifies that the typical Microsoft Windows predefined macros are
14084     to be set in the pre-processor, but does not influence the choice
14085     of runtime library/startup code.
14086
14087'-mwindows'
14088     This option is available for Cygwin and MinGW targets.  It
14089     specifies that a GUI application is to be generated by instructing
14090     the linker to set the PE header subsystem type appropriately.
14091
14092'-fno-set-stack-executable'
14093     This option is available for MinGW targets.  It specifies that the
14094     executable flag for the stack used by nested functions isn't set.
14095     This is necessary for binaries running in kernel mode of Microsoft
14096     Windows, as there the User32 API, which is used to set executable
14097     privileges, isn't available.
14098
14099'-fwritable-relocated-rdata'
14100     This option is available for MinGW and Cygwin targets.  It
14101     specifies that relocated-data in read-only section is put into
14102     .data section.  This is a necessary for older runtimes not
14103     supporting modification of .rdata sections for pseudo-relocation.
14104
14105'-mpe-aligned-commons'
14106     This option is available for Cygwin and MinGW targets.  It
14107     specifies that the GNU extension to the PE file format that permits
14108     the correct alignment of COMMON variables should be used when
14109     generating code.  It is enabled by default if GCC detects that the
14110     target assembler found during configuration supports the feature.
14111
14112 See also under *note i386 and x86-64 Options:: for standard options.
14113
14114
14115File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
14116
141173.17.18 IA-64 Options
14118---------------------
14119
14120These are the '-m' options defined for the Intel IA-64 architecture.
14121
14122'-mbig-endian'
14123     Generate code for a big-endian target.  This is the default for
14124     HP-UX.
14125
14126'-mlittle-endian'
14127     Generate code for a little-endian target.  This is the default for
14128     AIX5 and GNU/Linux.
14129
14130'-mgnu-as'
14131'-mno-gnu-as'
14132     Generate (or don't) code for the GNU assembler.  This is the
14133     default.
14134
14135'-mgnu-ld'
14136'-mno-gnu-ld'
14137     Generate (or don't) code for the GNU linker.  This is the default.
14138
14139'-mno-pic'
14140     Generate code that does not use a global pointer register.  The
14141     result is not position independent code, and violates the IA-64
14142     ABI.
14143
14144'-mvolatile-asm-stop'
14145'-mno-volatile-asm-stop'
14146     Generate (or don't) a stop bit immediately before and after
14147     volatile asm statements.
14148
14149'-mregister-names'
14150'-mno-register-names'
14151     Generate (or don't) 'in', 'loc', and 'out' register names for the
14152     stacked registers.  This may make assembler output more readable.
14153
14154'-mno-sdata'
14155'-msdata'
14156     Disable (or enable) optimizations that use the small data section.
14157     This may be useful for working around optimizer bugs.
14158
14159'-mconstant-gp'
14160     Generate code that uses a single constant global pointer value.
14161     This is useful when compiling kernel code.
14162
14163'-mauto-pic'
14164     Generate code that is self-relocatable.  This implies
14165     '-mconstant-gp'.  This is useful when compiling firmware code.
14166
14167'-minline-float-divide-min-latency'
14168     Generate code for inline divides of floating-point values using the
14169     minimum latency algorithm.
14170
14171'-minline-float-divide-max-throughput'
14172     Generate code for inline divides of floating-point values using the
14173     maximum throughput algorithm.
14174
14175'-mno-inline-float-divide'
14176     Do not generate inline code for divides of floating-point values.
14177
14178'-minline-int-divide-min-latency'
14179     Generate code for inline divides of integer values using the
14180     minimum latency algorithm.
14181
14182'-minline-int-divide-max-throughput'
14183     Generate code for inline divides of integer values using the
14184     maximum throughput algorithm.
14185
14186'-mno-inline-int-divide'
14187     Do not generate inline code for divides of integer values.
14188
14189'-minline-sqrt-min-latency'
14190     Generate code for inline square roots using the minimum latency
14191     algorithm.
14192
14193'-minline-sqrt-max-throughput'
14194     Generate code for inline square roots using the maximum throughput
14195     algorithm.
14196
14197'-mno-inline-sqrt'
14198     Do not generate inline code for 'sqrt'.
14199
14200'-mfused-madd'
14201'-mno-fused-madd'
14202     Do (don't) generate code that uses the fused multiply/add or
14203     multiply/subtract instructions.  The default is to use these
14204     instructions.
14205
14206'-mno-dwarf2-asm'
14207'-mdwarf2-asm'
14208     Don't (or do) generate assembler code for the DWARF 2 line number
14209     debugging info.  This may be useful when not using the GNU
14210     assembler.
14211
14212'-mearly-stop-bits'
14213'-mno-early-stop-bits'
14214     Allow stop bits to be placed earlier than immediately preceding the
14215     instruction that triggered the stop bit.  This can improve
14216     instruction scheduling, but does not always do so.
14217
14218'-mfixed-range=REGISTER-RANGE'
14219     Generate code treating the given register range as fixed registers.
14220     A fixed register is one that the register allocator cannot use.
14221     This is useful when compiling kernel code.  A register range is
14222     specified as two registers separated by a dash.  Multiple register
14223     ranges can be specified separated by a comma.
14224
14225'-mtls-size=TLS-SIZE'
14226     Specify bit size of immediate TLS offsets.  Valid values are 14,
14227     22, and 64.
14228
14229'-mtune=CPU-TYPE'
14230     Tune the instruction scheduling for a particular CPU, Valid values
14231     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
14232
14233'-milp32'
14234'-mlp64'
14235     Generate code for a 32-bit or 64-bit environment.  The 32-bit
14236     environment sets int, long and pointer to 32 bits.  The 64-bit
14237     environment sets int to 32 bits and long and pointer to 64 bits.
14238     These are HP-UX specific flags.
14239
14240'-mno-sched-br-data-spec'
14241'-msched-br-data-spec'
14242     (Dis/En)able data speculative scheduling before reload.  This
14243     results in generation of 'ld.a' instructions and the corresponding
14244     check instructions ('ld.c' / 'chk.a').  The default is 'disable'.
14245
14246'-msched-ar-data-spec'
14247'-mno-sched-ar-data-spec'
14248     (En/Dis)able data speculative scheduling after reload.  This
14249     results in generation of 'ld.a' instructions and the corresponding
14250     check instructions ('ld.c' / 'chk.a').  The default is 'enable'.
14251
14252'-mno-sched-control-spec'
14253'-msched-control-spec'
14254     (Dis/En)able control speculative scheduling.  This feature is
14255     available only during region scheduling (i.e. before reload).  This
14256     results in generation of the 'ld.s' instructions and the
14257     corresponding check instructions 'chk.s'.  The default is
14258     'disable'.
14259
14260'-msched-br-in-data-spec'
14261'-mno-sched-br-in-data-spec'
14262     (En/Dis)able speculative scheduling of the instructions that are
14263     dependent on the data speculative loads before reload.  This is
14264     effective only with '-msched-br-data-spec' enabled.  The default is
14265     'enable'.
14266
14267'-msched-ar-in-data-spec'
14268'-mno-sched-ar-in-data-spec'
14269     (En/Dis)able speculative scheduling of the instructions that are
14270     dependent on the data speculative loads after reload.  This is
14271     effective only with '-msched-ar-data-spec' enabled.  The default is
14272     'enable'.
14273
14274'-msched-in-control-spec'
14275'-mno-sched-in-control-spec'
14276     (En/Dis)able speculative scheduling of the instructions that are
14277     dependent on the control speculative loads.  This is effective only
14278     with '-msched-control-spec' enabled.  The default is 'enable'.
14279
14280'-mno-sched-prefer-non-data-spec-insns'
14281'-msched-prefer-non-data-spec-insns'
14282     If enabled, data-speculative instructions are chosen for schedule
14283     only if there are no other choices at the moment.  This makes the
14284     use of the data speculation much more conservative.  The default is
14285     'disable'.
14286
14287'-mno-sched-prefer-non-control-spec-insns'
14288'-msched-prefer-non-control-spec-insns'
14289     If enabled, control-speculative instructions are chosen for
14290     schedule only if there are no other choices at the moment.  This
14291     makes the use of the control speculation much more conservative.
14292     The default is 'disable'.
14293
14294'-mno-sched-count-spec-in-critical-path'
14295'-msched-count-spec-in-critical-path'
14296     If enabled, speculative dependencies are considered during
14297     computation of the instructions priorities.  This makes the use of
14298     the speculation a bit more conservative.  The default is 'disable'.
14299
14300'-msched-spec-ldc'
14301     Use a simple data speculation check.  This option is on by default.
14302
14303'-msched-control-spec-ldc'
14304     Use a simple check for control speculation.  This option is on by
14305     default.
14306
14307'-msched-stop-bits-after-every-cycle'
14308     Place a stop bit after every cycle when scheduling.  This option is
14309     on by default.
14310
14311'-msched-fp-mem-deps-zero-cost'
14312     Assume that floating-point stores and loads are not likely to cause
14313     a conflict when placed into the same instruction group.  This
14314     option is disabled by default.
14315
14316'-msel-sched-dont-check-control-spec'
14317     Generate checks for control speculation in selective scheduling.
14318     This flag is disabled by default.
14319
14320'-msched-max-memory-insns=MAX-INSNS'
14321     Limit on the number of memory insns per instruction group, giving
14322     lower priority to subsequent memory insns attempting to schedule in
14323     the same instruction group.  Frequently useful to prevent cache
14324     bank conflicts.  The default value is 1.
14325
14326'-msched-max-memory-insns-hard-limit'
14327     Makes the limit specified by 'msched-max-memory-insns' a hard
14328     limit, disallowing more than that number in an instruction group.
14329     Otherwise, the limit is "soft", meaning that non-memory operations
14330     are preferred when the limit is reached, but memory operations may
14331     still be scheduled.
14332
14333
14334File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
14335
143363.17.19 LM32 Options
14337--------------------
14338
14339These '-m' options are defined for the LatticeMico32 architecture:
14340
14341'-mbarrel-shift-enabled'
14342     Enable barrel-shift instructions.
14343
14344'-mdivide-enabled'
14345     Enable divide and modulus instructions.
14346
14347'-mmultiply-enabled'
14348     Enable multiply instructions.
14349
14350'-msign-extend-enabled'
14351     Enable sign extend instructions.
14352
14353'-muser-enabled'
14354     Enable user-defined instructions.
14355
14356
14357File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
14358
143593.17.20 M32C Options
14360--------------------
14361
14362'-mcpu=NAME'
14363     Select the CPU for which code is generated.  NAME may be one of
14364     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
14365     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
14366     series.
14367
14368'-msim'
14369     Specifies that the program will be run on the simulator.  This
14370     causes an alternate runtime library to be linked in which supports,
14371     for example, file I/O.  You must not use this option when
14372     generating programs that will run on real hardware; you must
14373     provide your own runtime library for whatever I/O functions are
14374     needed.
14375
14376'-memregs=NUMBER'
14377     Specifies the number of memory-based pseudo-registers GCC uses
14378     during code generation.  These pseudo-registers are used like real
14379     registers, so there is a tradeoff between GCC's ability to fit the
14380     code into available registers, and the performance penalty of using
14381     memory instead of registers.  Note that all modules in a program
14382     must be compiled with the same value for this option.  Because of
14383     that, you must not use this option with GCC's default runtime
14384     libraries.
14385
14386
14387File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
14388
143893.17.21 M32R/D Options
14390----------------------
14391
14392These '-m' options are defined for Renesas M32R/D architectures:
14393
14394'-m32r2'
14395     Generate code for the M32R/2.
14396
14397'-m32rx'
14398     Generate code for the M32R/X.
14399
14400'-m32r'
14401     Generate code for the M32R.  This is the default.
14402
14403'-mmodel=small'
14404     Assume all objects live in the lower 16MB of memory (so that their
14405     addresses can be loaded with the 'ld24' instruction), and assume
14406     all subroutines are reachable with the 'bl' instruction.  This is
14407     the default.
14408
14409     The addressability of a particular object can be set with the
14410     'model' attribute.
14411
14412'-mmodel=medium'
14413     Assume objects may be anywhere in the 32-bit address space (the
14414     compiler generates 'seth/add3' instructions to load their
14415     addresses), and assume all subroutines are reachable with the 'bl'
14416     instruction.
14417
14418'-mmodel=large'
14419     Assume objects may be anywhere in the 32-bit address space (the
14420     compiler generates 'seth/add3' instructions to load their
14421     addresses), and assume subroutines may not be reachable with the
14422     'bl' instruction (the compiler generates the much slower
14423     'seth/add3/jl' instruction sequence).
14424
14425'-msdata=none'
14426     Disable use of the small data area.  Variables are put into one of
14427     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
14428     been specified).  This is the default.
14429
14430     The small data area consists of sections '.sdata' and '.sbss'.
14431     Objects may be explicitly put in the small data area with the
14432     'section' attribute using one of these sections.
14433
14434'-msdata=sdata'
14435     Put small global and static data in the small data area, but do not
14436     generate special code to reference them.
14437
14438'-msdata=use'
14439     Put small global and static data in the small data area, and
14440     generate special instructions to reference them.
14441
14442'-G NUM'
14443     Put global and static objects less than or equal to NUM bytes into
14444     the small data or BSS sections instead of the normal data or BSS
14445     sections.  The default value of NUM is 8.  The '-msdata' option
14446     must be set to one of 'sdata' or 'use' for this option to have any
14447     effect.
14448
14449     All modules should be compiled with the same '-G NUM' value.
14450     Compiling with different values of NUM may or may not work; if it
14451     doesn't the linker gives an error message--incorrect code is not
14452     generated.
14453
14454'-mdebug'
14455     Makes the M32R-specific code in the compiler display some
14456     statistics that might help in debugging programs.
14457
14458'-malign-loops'
14459     Align all loops to a 32-byte boundary.
14460
14461'-mno-align-loops'
14462     Do not enforce a 32-byte alignment for loops.  This is the default.
14463
14464'-missue-rate=NUMBER'
14465     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
14466
14467'-mbranch-cost=NUMBER'
14468     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
14469     over conditional code, if it is 2, then the opposite applies.
14470
14471'-mflush-trap=NUMBER'
14472     Specifies the trap number to use to flush the cache.  The default
14473     is 12.  Valid numbers are between 0 and 15 inclusive.
14474
14475'-mno-flush-trap'
14476     Specifies that the cache cannot be flushed by using a trap.
14477
14478'-mflush-func=NAME'
14479     Specifies the name of the operating system function to call to
14480     flush the cache.  The default is __flush_cache_, but a function
14481     call is only used if a trap is not available.
14482
14483'-mno-flush-func'
14484     Indicates that there is no OS function for flushing the cache.
14485
14486
14487File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
14488
144893.17.22 M680x0 Options
14490----------------------
14491
14492These are the '-m' options defined for M680x0 and ColdFire processors.
14493The default settings depend on which architecture was selected when the
14494compiler was configured; the defaults for the most common choices are
14495given below.
14496
14497'-march=ARCH'
14498     Generate code for a specific M680x0 or ColdFire instruction set
14499     architecture.  Permissible values of ARCH for M680x0 architectures
14500     are: '68000', '68010', '68020', '68030', '68040', '68060' and
14501     'cpu32'.  ColdFire architectures are selected according to
14502     Freescale's ISA classification and the permissible values are:
14503     'isaa', 'isaaplus', 'isab' and 'isac'.
14504
14505     GCC defines a macro '__mcfARCH__' whenever it is generating code
14506     for a ColdFire target.  The ARCH in this macro is one of the
14507     '-march' arguments given above.
14508
14509     When used together, '-march' and '-mtune' select code that runs on
14510     a family of similar processors but that is optimized for a
14511     particular microarchitecture.
14512
14513'-mcpu=CPU'
14514     Generate code for a specific M680x0 or ColdFire processor.  The
14515     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
14516     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
14517     by the table below, which also classifies the CPUs into families:
14518
14519     *Family*       *'-mcpu' arguments*
14520     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
14521                    '51jm' '51mm' '51qe' '51qm'
14522     '5206'         '5202' '5204' '5206'
14523     '5206e'        '5206e'
14524     '5208'         '5207' '5208'
14525     '5211a'        '5210a' '5211a'
14526     '5213'         '5211' '5212' '5213'
14527     '5216'         '5214' '5216'
14528     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
14529     '5225'         '5224' '5225'
14530     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
14531     '5235'         '5232' '5233' '5234' '5235' '523x'
14532     '5249'         '5249'
14533     '5250'         '5250'
14534     '5271'         '5270' '5271'
14535     '5272'         '5272'
14536     '5275'         '5274' '5275'
14537     '5282'         '5280' '5281' '5282' '528x'
14538     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
14539     '5307'         '5307'
14540     '5329'         '5327' '5328' '5329' '532x'
14541     '5373'         '5372' '5373' '537x'
14542     '5407'         '5407'
14543     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
14544                    '5481' '5482' '5483' '5484' '5485'
14545
14546     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
14547     Other combinations of '-mcpu' and '-march' are rejected.
14548
14549     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
14550     selected.  It also defines '__mcf_family_FAMILY', where the value
14551     of FAMILY is given by the table above.
14552
14553'-mtune=TUNE'
14554     Tune the code for a particular microarchitecture within the
14555     constraints set by '-march' and '-mcpu'.  The M680x0
14556     microarchitectures are: '68000', '68010', '68020', '68030',
14557     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
14558     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
14559
14560     You can also use '-mtune=68020-40' for code that needs to run
14561     relatively well on 68020, 68030 and 68040 targets.
14562     '-mtune=68020-60' is similar but includes 68060 targets as well.
14563     These two options select the same tuning decisions as '-m68020-40'
14564     and '-m68020-60' respectively.
14565
14566     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
14567     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
14568     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
14569     range of architectures, as selected by '-mtune=68020-40' or
14570     '-mtune=68020-60', it defines the macros for every architecture in
14571     the range.
14572
14573     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
14574     microarchitecture UARCH, where UARCH is one of the arguments given
14575     above.
14576
14577'-m68000'
14578'-mc68000'
14579     Generate output for a 68000.  This is the default when the compiler
14580     is configured for 68000-based systems.  It is equivalent to
14581     '-march=68000'.
14582
14583     Use this option for microcontrollers with a 68000 or EC000 core,
14584     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
14585
14586'-m68010'
14587     Generate output for a 68010.  This is the default when the compiler
14588     is configured for 68010-based systems.  It is equivalent to
14589     '-march=68010'.
14590
14591'-m68020'
14592'-mc68020'
14593     Generate output for a 68020.  This is the default when the compiler
14594     is configured for 68020-based systems.  It is equivalent to
14595     '-march=68020'.
14596
14597'-m68030'
14598     Generate output for a 68030.  This is the default when the compiler
14599     is configured for 68030-based systems.  It is equivalent to
14600     '-march=68030'.
14601
14602'-m68040'
14603     Generate output for a 68040.  This is the default when the compiler
14604     is configured for 68040-based systems.  It is equivalent to
14605     '-march=68040'.
14606
14607     This option inhibits the use of 68881/68882 instructions that have
14608     to be emulated by software on the 68040.  Use this option if your
14609     68040 does not have code to emulate those instructions.
14610
14611'-m68060'
14612     Generate output for a 68060.  This is the default when the compiler
14613     is configured for 68060-based systems.  It is equivalent to
14614     '-march=68060'.
14615
14616     This option inhibits the use of 68020 and 68881/68882 instructions
14617     that have to be emulated by software on the 68060.  Use this option
14618     if your 68060 does not have code to emulate those instructions.
14619
14620'-mcpu32'
14621     Generate output for a CPU32.  This is the default when the compiler
14622     is configured for CPU32-based systems.  It is equivalent to
14623     '-march=cpu32'.
14624
14625     Use this option for microcontrollers with a CPU32 or CPU32+ core,
14626     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
14627     68341, 68349 and 68360.
14628
14629'-m5200'
14630     Generate output for a 520X ColdFire CPU.  This is the default when
14631     the compiler is configured for 520X-based systems.  It is
14632     equivalent to '-mcpu=5206', and is now deprecated in favor of that
14633     option.
14634
14635     Use this option for microcontroller with a 5200 core, including the
14636     MCF5202, MCF5203, MCF5204 and MCF5206.
14637
14638'-m5206e'
14639     Generate output for a 5206e ColdFire CPU.  The option is now
14640     deprecated in favor of the equivalent '-mcpu=5206e'.
14641
14642'-m528x'
14643     Generate output for a member of the ColdFire 528X family.  The
14644     option is now deprecated in favor of the equivalent '-mcpu=528x'.
14645
14646'-m5307'
14647     Generate output for a ColdFire 5307 CPU.  The option is now
14648     deprecated in favor of the equivalent '-mcpu=5307'.
14649
14650'-m5407'
14651     Generate output for a ColdFire 5407 CPU.  The option is now
14652     deprecated in favor of the equivalent '-mcpu=5407'.
14653
14654'-mcfv4e'
14655     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
14656     This includes use of hardware floating-point instructions.  The
14657     option is equivalent to '-mcpu=547x', and is now deprecated in
14658     favor of that option.
14659
14660'-m68020-40'
14661     Generate output for a 68040, without using any of the new
14662     instructions.  This results in code that can run relatively
14663     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14664     generated code does use the 68881 instructions that are emulated on
14665     the 68040.
14666
14667     The option is equivalent to '-march=68020' '-mtune=68020-40'.
14668
14669'-m68020-60'
14670     Generate output for a 68060, without using any of the new
14671     instructions.  This results in code that can run relatively
14672     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14673     generated code does use the 68881 instructions that are emulated on
14674     the 68060.
14675
14676     The option is equivalent to '-march=68020' '-mtune=68020-60'.
14677
14678'-mhard-float'
14679'-m68881'
14680     Generate floating-point instructions.  This is the default for
14681     68020 and above, and for ColdFire devices that have an FPU.  It
14682     defines the macro '__HAVE_68881__' on M680x0 targets and
14683     '__mcffpu__' on ColdFire targets.
14684
14685'-msoft-float'
14686     Do not generate floating-point instructions; use library calls
14687     instead.  This is the default for 68000, 68010, and 68832 targets.
14688     It is also the default for ColdFire devices that have no FPU.
14689
14690'-mdiv'
14691'-mno-div'
14692     Generate (do not generate) ColdFire hardware divide and remainder
14693     instructions.  If '-march' is used without '-mcpu', the default is
14694     "on" for ColdFire architectures and "off" for M680x0 architectures.
14695     Otherwise, the default is taken from the target CPU (either the
14696     default CPU, or the one specified by '-mcpu').  For example, the
14697     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
14698
14699     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
14700
14701'-mshort'
14702     Consider type 'int' to be 16 bits wide, like 'short int'.
14703     Additionally, parameters passed on the stack are also aligned to a
14704     16-bit boundary even on targets whose API mandates promotion to
14705     32-bit.
14706
14707'-mno-short'
14708     Do not consider type 'int' to be 16 bits wide.  This is the
14709     default.
14710
14711'-mnobitfield'
14712'-mno-bitfield'
14713     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
14714     and '-m5200' options imply '-mnobitfield'.
14715
14716'-mbitfield'
14717     Do use the bit-field instructions.  The '-m68020' option implies
14718     '-mbitfield'.  This is the default if you use a configuration
14719     designed for a 68020.
14720
14721'-mrtd'
14722     Use a different function-calling convention, in which functions
14723     that take a fixed number of arguments return with the 'rtd'
14724     instruction, which pops their arguments while returning.  This
14725     saves one instruction in the caller since there is no need to pop
14726     the arguments there.
14727
14728     This calling convention is incompatible with the one normally used
14729     on Unix, so you cannot use it if you need to call libraries
14730     compiled with the Unix compiler.
14731
14732     Also, you must provide function prototypes for all functions that
14733     take variable numbers of arguments (including 'printf'); otherwise
14734     incorrect code is generated for calls to those functions.
14735
14736     In addition, seriously incorrect code results if you call a
14737     function with too many arguments.  (Normally, extra arguments are
14738     harmlessly ignored.)
14739
14740     The 'rtd' instruction is supported by the 68010, 68020, 68030,
14741     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
14742
14743'-mno-rtd'
14744     Do not use the calling conventions selected by '-mrtd'.  This is
14745     the default.
14746
14747'-malign-int'
14748'-mno-align-int'
14749     Control whether GCC aligns 'int', 'long', 'long long', 'float',
14750     'double', and 'long double' variables on a 32-bit boundary
14751     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
14752     variables on 32-bit boundaries produces code that runs somewhat
14753     faster on processors with 32-bit busses at the expense of more
14754     memory.
14755
14756     *Warning:* if you use the '-malign-int' switch, GCC aligns
14757     structures containing the above types differently than most
14758     published application binary interface specifications for the m68k.
14759
14760'-mpcrel'
14761     Use the pc-relative addressing mode of the 68000 directly, instead
14762     of using a global offset table.  At present, this option implies
14763     '-fpic', allowing at most a 16-bit offset for pc-relative
14764     addressing.  '-fPIC' is not presently supported with '-mpcrel',
14765     though this could be supported for 68020 and higher processors.
14766
14767'-mno-strict-align'
14768'-mstrict-align'
14769     Do not (do) assume that unaligned memory references are handled by
14770     the system.
14771
14772'-msep-data'
14773     Generate code that allows the data segment to be located in a
14774     different area of memory from the text segment.  This allows for
14775     execute-in-place in an environment without virtual memory
14776     management.  This option implies '-fPIC'.
14777
14778'-mno-sep-data'
14779     Generate code that assumes that the data segment follows the text
14780     segment.  This is the default.
14781
14782'-mid-shared-library'
14783     Generate code that supports shared libraries via the library ID
14784     method.  This allows for execute-in-place and shared libraries in
14785     an environment without virtual memory management.  This option
14786     implies '-fPIC'.
14787
14788'-mno-id-shared-library'
14789     Generate code that doesn't assume ID-based shared libraries are
14790     being used.  This is the default.
14791
14792'-mshared-library-id=n'
14793     Specifies the identification number of the ID-based shared library
14794     being compiled.  Specifying a value of 0 generates more compact
14795     code; specifying other values forces the allocation of that number
14796     to the current library, but is no more space- or time-efficient
14797     than omitting this option.
14798
14799'-mxgot'
14800'-mno-xgot'
14801     When generating position-independent code for ColdFire, generate
14802     code that works if the GOT has more than 8192 entries.  This code
14803     is larger and slower than code generated without this option.  On
14804     M680x0 processors, this option is not needed; '-fPIC' suffices.
14805
14806     GCC normally uses a single instruction to load values from the GOT.
14807     While this is relatively efficient, it only works if the GOT is
14808     smaller than about 64k.  Anything larger causes the linker to
14809     report an error such as:
14810
14811          relocation truncated to fit: R_68K_GOT16O foobar
14812
14813     If this happens, you should recompile your code with '-mxgot'.  It
14814     should then work with very large GOTs.  However, code generated
14815     with '-mxgot' is less efficient, since it takes 4 instructions to
14816     fetch the value of a global symbol.
14817
14818     Note that some linkers, including newer versions of the GNU linker,
14819     can create multiple GOTs and sort GOT entries.  If you have such a
14820     linker, you should only need to use '-mxgot' when compiling a
14821     single object file that accesses more than 8192 GOT entries.  Very
14822     few do.
14823
14824     These options have no effect unless GCC is generating
14825     position-independent code.
14826
14827
14828File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
14829
148303.17.23 MCore Options
14831---------------------
14832
14833These are the '-m' options defined for the Motorola M*Core processors.
14834
14835'-mhardlit'
14836'-mno-hardlit'
14837     Inline constants into the code stream if it can be done in two
14838     instructions or less.
14839
14840'-mdiv'
14841'-mno-div'
14842     Use the divide instruction.  (Enabled by default).
14843
14844'-mrelax-immediate'
14845'-mno-relax-immediate'
14846     Allow arbitrary-sized immediates in bit operations.
14847
14848'-mwide-bitfields'
14849'-mno-wide-bitfields'
14850     Always treat bit-fields as 'int'-sized.
14851
14852'-m4byte-functions'
14853'-mno-4byte-functions'
14854     Force all functions to be aligned to a 4-byte boundary.
14855
14856'-mcallgraph-data'
14857'-mno-callgraph-data'
14858     Emit callgraph information.
14859
14860'-mslow-bytes'
14861'-mno-slow-bytes'
14862     Prefer word access when reading byte quantities.
14863
14864'-mlittle-endian'
14865'-mbig-endian'
14866     Generate code for a little-endian target.
14867
14868'-m210'
14869'-m340'
14870     Generate code for the 210 processor.
14871
14872'-mno-lsim'
14873     Assume that runtime support has been provided and so omit the
14874     simulator library ('libsim.a)' from the linker command line.
14875
14876'-mstack-increment=SIZE'
14877     Set the maximum amount for a single stack increment operation.
14878     Large values can increase the speed of programs that contain
14879     functions that need a large amount of stack space, but they can
14880     also trigger a segmentation fault if the stack is extended too
14881     much.  The default value is 0x1000.
14882
14883
14884File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
14885
148863.17.24 MeP Options
14887-------------------
14888
14889'-mabsdiff'
14890     Enables the 'abs' instruction, which is the absolute difference
14891     between two registers.
14892
14893'-mall-opts'
14894     Enables all the optional instructions--average, multiply, divide,
14895     bit operations, leading zero, absolute difference, min/max, clip,
14896     and saturation.
14897
14898'-maverage'
14899     Enables the 'ave' instruction, which computes the average of two
14900     registers.
14901
14902'-mbased=N'
14903     Variables of size N bytes or smaller are placed in the '.based'
14904     section by default.  Based variables use the '$tp' register as a
14905     base register, and there is a 128-byte limit to the '.based'
14906     section.
14907
14908'-mbitops'
14909     Enables the bit operation instructions--bit test ('btstm'), set
14910     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
14911     ('tas').
14912
14913'-mc=NAME'
14914     Selects which section constant data is placed in.  NAME may be
14915     'tiny', 'near', or 'far'.
14916
14917'-mclip'
14918     Enables the 'clip' instruction.  Note that '-mclip' is not useful
14919     unless you also provide '-mminmax'.
14920
14921'-mconfig=NAME'
14922     Selects one of the built-in core configurations.  Each MeP chip has
14923     one or more modules in it; each module has a core CPU and a variety
14924     of coprocessors, optional instructions, and peripherals.  The
14925     'MeP-Integrator' tool, not part of GCC, provides these
14926     configurations through this option; using this option is the same
14927     as using all the corresponding command-line options.  The default
14928     configuration is 'default'.
14929
14930'-mcop'
14931     Enables the coprocessor instructions.  By default, this is a 32-bit
14932     coprocessor.  Note that the coprocessor is normally enabled via the
14933     '-mconfig=' option.
14934
14935'-mcop32'
14936     Enables the 32-bit coprocessor's instructions.
14937
14938'-mcop64'
14939     Enables the 64-bit coprocessor's instructions.
14940
14941'-mivc2'
14942     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
14943
14944'-mdc'
14945     Causes constant variables to be placed in the '.near' section.
14946
14947'-mdiv'
14948     Enables the 'div' and 'divu' instructions.
14949
14950'-meb'
14951     Generate big-endian code.
14952
14953'-mel'
14954     Generate little-endian code.
14955
14956'-mio-volatile'
14957     Tells the compiler that any variable marked with the 'io' attribute
14958     is to be considered volatile.
14959
14960'-ml'
14961     Causes variables to be assigned to the '.far' section by default.
14962
14963'-mleadz'
14964     Enables the 'leadz' (leading zero) instruction.
14965
14966'-mm'
14967     Causes variables to be assigned to the '.near' section by default.
14968
14969'-mminmax'
14970     Enables the 'min' and 'max' instructions.
14971
14972'-mmult'
14973     Enables the multiplication and multiply-accumulate instructions.
14974
14975'-mno-opts'
14976     Disables all the optional instructions enabled by '-mall-opts'.
14977
14978'-mrepeat'
14979     Enables the 'repeat' and 'erepeat' instructions, used for
14980     low-overhead looping.
14981
14982'-ms'
14983     Causes all variables to default to the '.tiny' section.  Note that
14984     there is a 65536-byte limit to this section.  Accesses to these
14985     variables use the '%gp' base register.
14986
14987'-msatur'
14988     Enables the saturation instructions.  Note that the compiler does
14989     not currently generate these itself, but this option is included
14990     for compatibility with other tools, like 'as'.
14991
14992'-msdram'
14993     Link the SDRAM-based runtime instead of the default ROM-based
14994     runtime.
14995
14996'-msim'
14997     Link the simulator runtime libraries.
14998
14999'-msimnovec'
15000     Link the simulator runtime libraries, excluding built-in support
15001     for reset and exception vectors and tables.
15002
15003'-mtf'
15004     Causes all functions to default to the '.far' section.  Without
15005     this option, functions default to the '.near' section.
15006
15007'-mtiny=N'
15008     Variables that are N bytes or smaller are allocated to the '.tiny'
15009     section.  These variables use the '$gp' base register.  The default
15010     for this option is 4, but note that there's a 65536-byte limit to
15011     the '.tiny' section.
15012
15013
15014File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
15015
150163.17.25 MicroBlaze Options
15017--------------------------
15018
15019'-msoft-float'
15020     Use software emulation for floating point (default).
15021
15022'-mhard-float'
15023     Use hardware floating-point instructions.
15024
15025'-mmemcpy'
15026     Do not optimize block moves, use 'memcpy'.
15027
15028'-mno-clearbss'
15029     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
15030     instead.
15031
15032'-mcpu=CPU-TYPE'
15033     Use features of, and schedule code for, the given CPU. Supported
15034     values are in the format 'vX.YY.Z', where X is a major version, YY
15035     is the minor version, and Z is compatibility code.  Example values
15036     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b',
15037     'v6.00.a'.
15038
15039'-mxl-soft-mul'
15040     Use software multiply emulation (default).
15041
15042'-mxl-soft-div'
15043     Use software emulation for divides (default).
15044
15045'-mxl-barrel-shift'
15046     Use the hardware barrel shifter.
15047
15048'-mxl-pattern-compare'
15049     Use pattern compare instructions.
15050
15051'-msmall-divides'
15052     Use table lookup optimization for small signed integer divisions.
15053
15054'-mxl-stack-check'
15055     This option is deprecated.  Use '-fstack-check' instead.
15056
15057'-mxl-gp-opt'
15058     Use GP-relative '.sdata'/'.sbss' sections.
15059
15060'-mxl-multiply-high'
15061     Use multiply high instructions for high part of 32x32 multiply.
15062
15063'-mxl-float-convert'
15064     Use hardware floating-point conversion instructions.
15065
15066'-mxl-float-sqrt'
15067     Use hardware floating-point square root instruction.
15068
15069'-mbig-endian'
15070     Generate code for a big-endian target.
15071
15072'-mlittle-endian'
15073     Generate code for a little-endian target.
15074
15075'-mxl-reorder'
15076     Use reorder instructions (swap and byte reversed load/store).
15077
15078'-mxl-mode-APP-MODEL'
15079     Select application model APP-MODEL.  Valid models are
15080     'executable'
15081          normal executable (default), uses startup code 'crt0.o'.
15082
15083     'xmdstub'
15084          for use with Xilinx Microprocessor Debugger (XMD) based
15085          software intrusive debug agent called xmdstub.  This uses
15086          startup file 'crt1.o' and sets the start address of the
15087          program to 0x800.
15088
15089     'bootstrap'
15090          for applications that are loaded using a bootloader.  This
15091          model uses startup file 'crt2.o' which does not contain a
15092          processor reset vector handler.  This is suitable for
15093          transferring control on a processor reset to the bootloader
15094          rather than the application.
15095
15096     'novectors'
15097          for applications that do not require any of the MicroBlaze
15098          vectors.  This option may be useful for applications running
15099          within a monitoring application.  This model uses 'crt3.o' as
15100          a startup file.
15101
15102     Option '-xl-mode-APP-MODEL' is a deprecated alias for
15103     '-mxl-mode-APP-MODEL'.
15104
15105
15106File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
15107
151083.17.26 MIPS Options
15109--------------------
15110
15111'-EB'
15112     Generate big-endian code.
15113
15114'-EL'
15115     Generate little-endian code.  This is the default for 'mips*el-*-*'
15116     configurations.
15117
15118'-march=ARCH'
15119     Generate code that runs on ARCH, which can be the name of a generic
15120     MIPS ISA, or the name of a particular processor.  The ISA names
15121     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
15122     'mips64' and 'mips64r2'.  The processor names are: '4kc', '4km',
15123     '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf',
15124     '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
15125     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
15126     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
15127     '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k',
15128     'octeon', 'octeon+', 'octeon2', 'orion', 'r2000', 'r3000', 'r3900',
15129     'r4000', 'r4400', 'r4600', 'r4650', 'r4700', 'r6000', 'r8000',
15130     'rm7000', 'rm9000', 'r10000', 'r12000', 'r14000', 'r16000', 'sb1',
15131     'sr71000', 'vr4100', 'vr4111', 'vr4120', 'vr4130', 'vr4300',
15132     'vr5000', 'vr5400', 'vr5500', 'xlr' and 'xlp'.  The special value
15133     'from-abi' selects the most compatible architecture for the
15134     selected ABI (that is, 'mips1' for 32-bit ABIs and 'mips3' for
15135     64-bit ABIs).
15136
15137     The native Linux/GNU toolchain also supports the value 'native',
15138     which selects the best architecture option for the host processor.
15139     '-march=native' has no effect if GCC does not recognize the
15140     processor.
15141
15142     In processor names, a final '000' can be abbreviated as 'k' (for
15143     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
15144     written 'r'.
15145
15146     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
15147     half the rate of the core, names of the form 'Nf1_1' refer to
15148     processors with FPUs clocked at the same rate as the core, and
15149     names of the form 'Nf3_2' refer to processors with FPUs clocked a
15150     ratio of 3:2 with respect to the core.  For compatibility reasons,
15151     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
15152     accepted as synonyms for 'Nf1_1'.
15153
15154     GCC defines two macros based on the value of this option.  The
15155     first is '_MIPS_ARCH', which gives the name of target architecture,
15156     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
15157     is the capitalized value of '_MIPS_ARCH'.  For example,
15158     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
15159     '_MIPS_ARCH_R2000'.
15160
15161     Note that the '_MIPS_ARCH' macro uses the processor names given
15162     above.  In other words, it has the full prefix and does not
15163     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
15164     names the resolved architecture (either '"mips1"' or '"mips3"').
15165     It names the default architecture when no '-march' option is given.
15166
15167'-mtune=ARCH'
15168     Optimize for ARCH.  Among other things, this option controls the
15169     way instructions are scheduled, and the perceived cost of
15170     arithmetic operations.  The list of ARCH values is the same as for
15171     '-march'.
15172
15173     When this option is not used, GCC optimizes for the processor
15174     specified by '-march'.  By using '-march' and '-mtune' together, it
15175     is possible to generate code that runs on a family of processors,
15176     but optimize the code for one particular member of that family.
15177
15178     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
15179     which work in the same way as the '-march' ones described above.
15180
15181'-mips1'
15182     Equivalent to '-march=mips1'.
15183
15184'-mips2'
15185     Equivalent to '-march=mips2'.
15186
15187'-mips3'
15188     Equivalent to '-march=mips3'.
15189
15190'-mips4'
15191     Equivalent to '-march=mips4'.
15192
15193'-mips32'
15194     Equivalent to '-march=mips32'.
15195
15196'-mips32r2'
15197     Equivalent to '-march=mips32r2'.
15198
15199'-mips64'
15200     Equivalent to '-march=mips64'.
15201
15202'-mips64r2'
15203     Equivalent to '-march=mips64r2'.
15204
15205'-mips16'
15206'-mno-mips16'
15207     Generate (do not generate) MIPS16 code.  If GCC is targeting a
15208     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
15209
15210     MIPS16 code generation can also be controlled on a per-function
15211     basis by means of 'mips16' and 'nomips16' attributes.  *Note
15212     Function Attributes::, for more information.
15213
15214'-mflip-mips16'
15215     Generate MIPS16 code on alternating functions.  This option is
15216     provided for regression testing of mixed MIPS16/non-MIPS16 code
15217     generation, and is not intended for ordinary use in compiling user
15218     code.
15219
15220'-minterlink-mips16'
15221'-mno-interlink-mips16'
15222     Require (do not require) that non-MIPS16 code be link-compatible
15223     with MIPS16 code.
15224
15225     For example, non-MIPS16 code cannot jump directly to MIPS16 code;
15226     it must either use a call or an indirect jump.
15227     '-minterlink-mips16' therefore disables direct jumps unless GCC
15228     knows that the target of the jump is not MIPS16.
15229
15230'-mabi=32'
15231'-mabi=o64'
15232'-mabi=n32'
15233'-mabi=64'
15234'-mabi=eabi'
15235     Generate code for the given ABI.
15236
15237     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
15238     generates 64-bit code when you select a 64-bit architecture, but
15239     you can use '-mgp32' to get 32-bit code instead.
15240
15241     For information about the O64 ABI, see
15242     <http://gcc.gnu.org/projects/mipso64-abi.html>.
15243
15244     GCC supports a variant of the o32 ABI in which floating-point
15245     registers are 64 rather than 32 bits wide.  You can select this
15246     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
15247     'mthc1' and 'mfhc1' instructions and is therefore only supported
15248     for MIPS32R2 processors.
15249
15250     The register assignments for arguments and return values remain the
15251     same, but each scalar value is passed in a single 64-bit register
15252     rather than a pair of 32-bit registers.  For example, scalar
15253     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
15254     pair.  The set of call-saved registers also remains the same, but
15255     all 64 bits are saved.
15256
15257'-mabicalls'
15258'-mno-abicalls'
15259     Generate (do not generate) code that is suitable for SVR4-style
15260     dynamic objects.  '-mabicalls' is the default for SVR4-based
15261     systems.
15262
15263'-mshared'
15264'-mno-shared'
15265     Generate (do not generate) code that is fully position-independent,
15266     and that can therefore be linked into shared libraries.  This
15267     option only affects '-mabicalls'.
15268
15269     All '-mabicalls' code has traditionally been position-independent,
15270     regardless of options like '-fPIC' and '-fpic'.  However, as an
15271     extension, the GNU toolchain allows executables to use absolute
15272     accesses for locally-binding symbols.  It can also use shorter GP
15273     initialization sequences and generate direct calls to
15274     locally-defined functions.  This mode is selected by '-mno-shared'.
15275
15276     '-mno-shared' depends on binutils 2.16 or higher and generates
15277     objects that can only be linked by the GNU linker.  However, the
15278     option does not affect the ABI of the final executable; it only
15279     affects the ABI of relocatable objects.  Using '-mno-shared'
15280     generally makes executables both smaller and quicker.
15281
15282     '-mshared' is the default.
15283
15284'-mplt'
15285'-mno-plt'
15286     Assume (do not assume) that the static and dynamic linkers support
15287     PLTs and copy relocations.  This option only affects '-mno-shared
15288     -mabicalls'.  For the n64 ABI, this option has no effect without
15289     '-msym32'.
15290
15291     You can make '-mplt' the default by configuring GCC with
15292     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
15293
15294'-mxgot'
15295'-mno-xgot'
15296     Lift (do not lift) the usual restrictions on the size of the global
15297     offset table.
15298
15299     GCC normally uses a single instruction to load values from the GOT.
15300     While this is relatively efficient, it only works if the GOT is
15301     smaller than about 64k.  Anything larger causes the linker to
15302     report an error such as:
15303
15304          relocation truncated to fit: R_MIPS_GOT16 foobar
15305
15306     If this happens, you should recompile your code with '-mxgot'.
15307     This works with very large GOTs, although the code is also less
15308     efficient, since it takes three instructions to fetch the value of
15309     a global symbol.
15310
15311     Note that some linkers can create multiple GOTs.  If you have such
15312     a linker, you should only need to use '-mxgot' when a single object
15313     file accesses more than 64k's worth of GOT entries.  Very few do.
15314
15315     These options have no effect unless GCC is generating position
15316     independent code.
15317
15318'-mgp32'
15319     Assume that general-purpose registers are 32 bits wide.
15320
15321'-mgp64'
15322     Assume that general-purpose registers are 64 bits wide.
15323
15324'-mfp32'
15325     Assume that floating-point registers are 32 bits wide.
15326
15327'-mfp64'
15328     Assume that floating-point registers are 64 bits wide.
15329
15330'-mhard-float'
15331     Use floating-point coprocessor instructions.
15332
15333'-msoft-float'
15334     Do not use floating-point coprocessor instructions.  Implement
15335     floating-point calculations using library calls instead.
15336
15337'-mno-float'
15338     Equivalent to '-msoft-float', but additionally asserts that the
15339     program being compiled does not perform any floating-point
15340     operations.  This option is presently supported only by some
15341     bare-metal MIPS configurations, where it may select a special set
15342     of libraries that lack all floating-point support (including, for
15343     example, the floating-point 'printf' formats).  If code compiled
15344     with '-mno-float' accidentally contains floating-point operations,
15345     it is likely to suffer a link-time or run-time failure.
15346
15347'-msingle-float'
15348     Assume that the floating-point coprocessor only supports
15349     single-precision operations.
15350
15351'-mdouble-float'
15352     Assume that the floating-point coprocessor supports
15353     double-precision operations.  This is the default.
15354
15355'-mllsc'
15356'-mno-llsc'
15357     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
15358     atomic memory built-in functions.  When neither option is
15359     specified, GCC uses the instructions if the target architecture
15360     supports them.
15361
15362     '-mllsc' is useful if the runtime environment can emulate the
15363     instructions and '-mno-llsc' can be useful when compiling for
15364     nonstandard ISAs.  You can make either option the default by
15365     configuring GCC with '--with-llsc' and '--without-llsc'
15366     respectively.  '--with-llsc' is the default for some
15367     configurations; see the installation documentation for details.
15368
15369'-mdsp'
15370'-mno-dsp'
15371     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
15372     Built-in Functions::.  This option defines the preprocessor macro
15373     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
15374
15375'-mdspr2'
15376'-mno-dspr2'
15377     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
15378     Built-in Functions::.  This option defines the preprocessor macros
15379     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
15380     to 2.
15381
15382'-msmartmips'
15383'-mno-smartmips'
15384     Use (do not use) the MIPS SmartMIPS ASE.
15385
15386'-mpaired-single'
15387'-mno-paired-single'
15388     Use (do not use) paired-single floating-point instructions.  *Note
15389     MIPS Paired-Single Support::.  This option requires hardware
15390     floating-point support to be enabled.
15391
15392'-mdmx'
15393'-mno-mdmx'
15394     Use (do not use) MIPS Digital Media Extension instructions.  This
15395     option can only be used when generating 64-bit code and requires
15396     hardware floating-point support to be enabled.
15397
15398'-mips3d'
15399'-mno-mips3d'
15400     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
15401     Functions::.  The option '-mips3d' implies '-mpaired-single'.
15402
15403'-mmt'
15404'-mno-mt'
15405     Use (do not use) MT Multithreading instructions.
15406
15407'-mmcu'
15408'-mno-mcu'
15409     Use (do not use) the MIPS MCU ASE instructions.
15410
15411'-mlong64'
15412     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
15413     explanation of the default and the way that the pointer size is
15414     determined.
15415
15416'-mlong32'
15417     Force 'long', 'int', and pointer types to be 32 bits wide.
15418
15419     The default size of 'int's, 'long's and pointers depends on the
15420     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
15421     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
15422     'long's.  Pointers are the same size as 'long's, or the same size
15423     as integer registers, whichever is smaller.
15424
15425'-msym32'
15426'-mno-sym32'
15427     Assume (do not assume) that all symbols have 32-bit values,
15428     regardless of the selected ABI.  This option is useful in
15429     combination with '-mabi=64' and '-mno-abicalls' because it allows
15430     GCC to generate shorter and faster references to symbolic
15431     addresses.
15432
15433'-G NUM'
15434     Put definitions of externally-visible data in a small data section
15435     if that data is no bigger than NUM bytes.  GCC can then generate
15436     more efficient accesses to the data; see '-mgpopt' for details.
15437
15438     The default '-G' option depends on the configuration.
15439
15440'-mlocal-sdata'
15441'-mno-local-sdata'
15442     Extend (do not extend) the '-G' behavior to local data too, such as
15443     to static variables in C.  '-mlocal-sdata' is the default for all
15444     configurations.
15445
15446     If the linker complains that an application is using too much small
15447     data, you might want to try rebuilding the less
15448     performance-critical parts with '-mno-local-sdata'.  You might also
15449     want to build large libraries with '-mno-local-sdata', so that the
15450     libraries leave more room for the main program.
15451
15452'-mextern-sdata'
15453'-mno-extern-sdata'
15454     Assume (do not assume) that externally-defined data is in a small
15455     data section if the size of that data is within the '-G' limit.
15456     '-mextern-sdata' is the default for all configurations.
15457
15458     If you compile a module MOD with '-mextern-sdata' '-G NUM'
15459     '-mgpopt', and MOD references a variable VAR that is no bigger than
15460     NUM bytes, you must make sure that VAR is placed in a small data
15461     section.  If VAR is defined by another module, you must either
15462     compile that module with a high-enough '-G' setting or attach a
15463     'section' attribute to VAR's definition.  If VAR is common, you
15464     must link the application with a high-enough '-G' setting.
15465
15466     The easiest way of satisfying these restrictions is to compile and
15467     link every module with the same '-G' option.  However, you may wish
15468     to build a library that supports several different small data
15469     limits.  You can do this by compiling the library with the highest
15470     supported '-G' setting and additionally using '-mno-extern-sdata'
15471     to stop the library from making assumptions about
15472     externally-defined data.
15473
15474'-mgpopt'
15475'-mno-gpopt'
15476     Use (do not use) GP-relative accesses for symbols that are known to
15477     be in a small data section; see '-G', '-mlocal-sdata' and
15478     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
15479
15480     '-mno-gpopt' is useful for cases where the '$gp' register might not
15481     hold the value of '_gp'.  For example, if the code is part of a
15482     library that might be used in a boot monitor, programs that call
15483     boot monitor routines pass an unknown value in '$gp'.  (In such
15484     situations, the boot monitor itself is usually compiled with
15485     '-G0'.)
15486
15487     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
15488
15489'-membedded-data'
15490'-mno-embedded-data'
15491     Allocate variables to the read-only data section first if possible,
15492     then next in the small data section if possible, otherwise in data.
15493     This gives slightly slower code than the default, but reduces the
15494     amount of RAM required when executing, and thus may be preferred
15495     for some embedded systems.
15496
15497'-muninit-const-in-rodata'
15498'-mno-uninit-const-in-rodata'
15499     Put uninitialized 'const' variables in the read-only data section.
15500     This option is only meaningful in conjunction with
15501     '-membedded-data'.
15502
15503'-mcode-readable=SETTING'
15504     Specify whether GCC may generate code that reads from executable
15505     sections.  There are three possible settings:
15506
15507     '-mcode-readable=yes'
15508          Instructions may freely access executable sections.  This is
15509          the default setting.
15510
15511     '-mcode-readable=pcrel'
15512          MIPS16 PC-relative load instructions can access executable
15513          sections, but other instructions must not do so.  This option
15514          is useful on 4KSc and 4KSd processors when the code TLBs have
15515          the Read Inhibit bit set.  It is also useful on processors
15516          that can be configured to have a dual instruction/data SRAM
15517          interface and that, like the M4K, automatically redirect
15518          PC-relative loads to the instruction RAM.
15519
15520     '-mcode-readable=no'
15521          Instructions must not access executable sections.  This option
15522          can be useful on targets that are configured to have a dual
15523          instruction/data SRAM interface but that (unlike the M4K) do
15524          not automatically redirect PC-relative loads to the
15525          instruction RAM.
15526
15527'-msplit-addresses'
15528'-mno-split-addresses'
15529     Enable (disable) use of the '%hi()' and '%lo()' assembler
15530     relocation operators.  This option has been superseded by
15531     '-mexplicit-relocs' but is retained for backwards compatibility.
15532
15533'-mexplicit-relocs'
15534'-mno-explicit-relocs'
15535     Use (do not use) assembler relocation operators when dealing with
15536     symbolic addresses.  The alternative, selected by
15537     '-mno-explicit-relocs', is to use assembler macros instead.
15538
15539     '-mexplicit-relocs' is the default if GCC was configured to use an
15540     assembler that supports relocation operators.
15541
15542'-mcheck-zero-division'
15543'-mno-check-zero-division'
15544     Trap (do not trap) on integer division by zero.
15545
15546     The default is '-mcheck-zero-division'.
15547
15548'-mdivide-traps'
15549'-mdivide-breaks'
15550     MIPS systems check for division by zero by generating either a
15551     conditional trap or a break instruction.  Using traps results in
15552     smaller code, but is only supported on MIPS II and later.  Also,
15553     some versions of the Linux kernel have a bug that prevents trap
15554     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
15555     to allow conditional traps on architectures that support them and
15556     '-mdivide-breaks' to force the use of breaks.
15557
15558     The default is usually '-mdivide-traps', but this can be overridden
15559     at configure time using '--with-divide=breaks'.  Divide-by-zero
15560     checks can be completely disabled using '-mno-check-zero-division'.
15561
15562'-mmemcpy'
15563'-mno-memcpy'
15564     Force (do not force) the use of 'memcpy()' for non-trivial block
15565     moves.  The default is '-mno-memcpy', which allows GCC to inline
15566     most constant-sized copies.
15567
15568'-mlong-calls'
15569'-mno-long-calls'
15570     Disable (do not disable) use of the 'jal' instruction.  Calling
15571     functions using 'jal' is more efficient but requires the caller and
15572     callee to be in the same 256 megabyte segment.
15573
15574     This option has no effect on abicalls code.  The default is
15575     '-mno-long-calls'.
15576
15577'-mmad'
15578'-mno-mad'
15579     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
15580     as provided by the R4650 ISA.
15581
15582'-mfused-madd'
15583'-mno-fused-madd'
15584     Enable (disable) use of the floating-point multiply-accumulate
15585     instructions, when they are available.  The default is
15586     '-mfused-madd'.
15587
15588     On the R8000 CPU when multiply-accumulate instructions are used,
15589     the intermediate product is calculated to infinite precision and is
15590     not subject to the FCSR Flush to Zero bit.  This may be undesirable
15591     in some circumstances.  On other processors the result is
15592     numerically identical to the equivalent computation using separate
15593     multiply, add, subtract and negate instructions.
15594
15595'-nocpp'
15596     Tell the MIPS assembler to not run its preprocessor over user
15597     assembler files (with a '.s' suffix) when assembling them.
15598
15599'-mfix-24k'
15600'-mno-fix-24k'
15601     Work around the 24K E48 (lost data on stores during refill) errata.
15602     The workarounds are implemented by the assembler rather than by
15603     GCC.
15604
15605'-mfix-r4000'
15606'-mno-fix-r4000'
15607     Work around certain R4000 CPU errata:
15608        - A double-word or a variable shift may give an incorrect result
15609          if executed immediately after starting an integer division.
15610        - A double-word or a variable shift may give an incorrect result
15611          if executed while an integer multiplication is in progress.
15612        - An integer division may give an incorrect result if started in
15613          a delay slot of a taken branch or a jump.
15614
15615'-mfix-r4400'
15616'-mno-fix-r4400'
15617     Work around certain R4400 CPU errata:
15618        - A double-word or a variable shift may give an incorrect result
15619          if executed immediately after starting an integer division.
15620
15621'-mfix-r10000'
15622'-mno-fix-r10000'
15623     Work around certain R10000 errata:
15624        - 'll'/'sc' sequences may not behave atomically on revisions
15625          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
15626
15627     This option can only be used if the target architecture supports
15628     branch-likely instructions.  '-mfix-r10000' is the default when
15629     '-march=r10000' is used; '-mno-fix-r10000' is the default
15630     otherwise.
15631
15632'-mfix-vr4120'
15633'-mno-fix-vr4120'
15634     Work around certain VR4120 errata:
15635        - 'dmultu' does not always produce the correct result.
15636        - 'div' and 'ddiv' do not always produce the correct result if
15637          one of the operands is negative.
15638     The workarounds for the division errata rely on special functions
15639     in 'libgcc.a'.  At present, these functions are only provided by
15640     the 'mips64vr*-elf' configurations.
15641
15642     Other VR4120 errata require a NOP to be inserted between certain
15643     pairs of instructions.  These errata are handled by the assembler,
15644     not by GCC itself.
15645
15646'-mfix-vr4130'
15647     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
15648     implemented by the assembler rather than by GCC, although GCC
15649     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
15650     'dmacc' and 'dmacchi' instructions are available instead.
15651
15652'-mfix-sb1'
15653'-mno-fix-sb1'
15654     Work around certain SB-1 CPU core errata.  (This flag currently
15655     works around the SB-1 revision 2 "F1" and "F2" floating-point
15656     errata.)
15657
15658'-mr10k-cache-barrier=SETTING'
15659     Specify whether GCC should insert cache barriers to avoid the
15660     side-effects of speculation on R10K processors.
15661
15662     In common with many processors, the R10K tries to predict the
15663     outcome of a conditional branch and speculatively executes
15664     instructions from the "taken" branch.  It later aborts these
15665     instructions if the predicted outcome is wrong.  However, on the
15666     R10K, even aborted instructions can have side effects.
15667
15668     This problem only affects kernel stores and, depending on the
15669     system, kernel loads.  As an example, a speculatively-executed
15670     store may load the target memory into cache and mark the cache line
15671     as dirty, even if the store itself is later aborted.  If a DMA
15672     operation writes to the same area of memory before the "dirty" line
15673     is flushed, the cached data overwrites the DMA-ed data.  See the
15674     R10K processor manual for a full description, including other
15675     potential problems.
15676
15677     One workaround is to insert cache barrier instructions before every
15678     memory access that might be speculatively executed and that might
15679     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
15680     controls GCC's implementation of this workaround.  It assumes that
15681     aborted accesses to any byte in the following regions does not have
15682     side effects:
15683
15684       1. the memory occupied by the current function's stack frame;
15685
15686       2. the memory occupied by an incoming stack argument;
15687
15688       3. the memory occupied by an object with a link-time-constant
15689          address.
15690
15691     It is the kernel's responsibility to ensure that speculative
15692     accesses to these regions are indeed safe.
15693
15694     If the input program contains a function declaration such as:
15695
15696          void foo (void);
15697
15698     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
15699     to be executed speculatively.  GCC honors this restriction for
15700     functions it compiles itself.  It expects non-GCC functions (such
15701     as hand-written assembly code) to do the same.
15702
15703     The option has three forms:
15704
15705     '-mr10k-cache-barrier=load-store'
15706          Insert a cache barrier before a load or store that might be
15707          speculatively executed and that might have side effects even
15708          if aborted.
15709
15710     '-mr10k-cache-barrier=store'
15711          Insert a cache barrier before a store that might be
15712          speculatively executed and that might have side effects even
15713          if aborted.
15714
15715     '-mr10k-cache-barrier=none'
15716          Disable the insertion of cache barriers.  This is the default
15717          setting.
15718
15719'-mflush-func=FUNC'
15720'-mno-flush-func'
15721     Specifies the function to call to flush the I and D caches, or to
15722     not call any such function.  If called, the function must take the
15723     same arguments as the common '_flush_func()', that is, the address
15724     of the memory range for which the cache is being flushed, the size
15725     of the memory range, and the number 3 (to flush both caches).  The
15726     default depends on the target GCC was configured for, but commonly
15727     is either '_flush_func' or '__cpu_flush'.
15728
15729'mbranch-cost=NUM'
15730     Set the cost of branches to roughly NUM "simple" instructions.
15731     This cost is only a heuristic and is not guaranteed to produce
15732     consistent results across releases.  A zero cost redundantly
15733     selects the default, which is based on the '-mtune' setting.
15734
15735'-mbranch-likely'
15736'-mno-branch-likely'
15737     Enable or disable use of Branch Likely instructions, regardless of
15738     the default for the selected architecture.  By default, Branch
15739     Likely instructions may be generated if they are supported by the
15740     selected architecture.  An exception is for the MIPS32 and MIPS64
15741     architectures and processors that implement those architectures;
15742     for those, Branch Likely instructions are not be generated by
15743     default because the MIPS32 and MIPS64 architectures specifically
15744     deprecate their use.
15745
15746'-mfp-exceptions'
15747'-mno-fp-exceptions'
15748     Specifies whether FP exceptions are enabled.  This affects how FP
15749     instructions are scheduled for some processors.  The default is
15750     that FP exceptions are enabled.
15751
15752     For instance, on the SB-1, if FP exceptions are disabled, and we
15753     are emitting 64-bit code, then we can use both FP pipes.
15754     Otherwise, we can only use one FP pipe.
15755
15756'-mvr4130-align'
15757'-mno-vr4130-align'
15758     The VR4130 pipeline is two-way superscalar, but can only issue two
15759     instructions together if the first one is 8-byte aligned.  When
15760     this option is enabled, GCC aligns pairs of instructions that it
15761     thinks should execute in parallel.
15762
15763     This option only has an effect when optimizing for the VR4130.  It
15764     normally makes code faster, but at the expense of making it bigger.
15765     It is enabled by default at optimization level '-O3'.
15766
15767'-msynci'
15768'-mno-synci'
15769     Enable (disable) generation of 'synci' instructions on
15770     architectures that support it.  The 'synci' instructions (if
15771     enabled) are generated when '__builtin___clear_cache()' is
15772     compiled.
15773
15774     This option defaults to '-mno-synci', but the default can be
15775     overridden by configuring with '--with-synci'.
15776
15777     When compiling code for single processor systems, it is generally
15778     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
15779     does not invalidate the instruction caches on all cores and may
15780     lead to undefined behavior.
15781
15782'-mrelax-pic-calls'
15783'-mno-relax-pic-calls'
15784     Try to turn PIC calls that are normally dispatched via register
15785     '$25' into direct calls.  This is only possible if the linker can
15786     resolve the destination at link-time and if the destination is
15787     within range for a direct call.
15788
15789     '-mrelax-pic-calls' is the default if GCC was configured to use an
15790     assembler and a linker that support the '.reloc' assembly directive
15791     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
15792     this optimization can be performed by the assembler and the linker
15793     alone without help from the compiler.
15794
15795'-mmcount-ra-address'
15796'-mno-mcount-ra-address'
15797     Emit (do not emit) code that allows '_mcount' to modify the calling
15798     function's return address.  When enabled, this option extends the
15799     usual '_mcount' interface with a new RA-ADDRESS parameter, which
15800     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
15801     can then modify the return address by doing both of the following:
15802        * Returning the new address in register '$31'.
15803        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
15804          nonnull.
15805
15806     The default is '-mno-mcount-ra-address'.
15807
15808
15809File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
15810
158113.17.27 MMIX Options
15812--------------------
15813
15814These options are defined for the MMIX:
15815
15816'-mlibfuncs'
15817'-mno-libfuncs'
15818     Specify that intrinsic library functions are being compiled,
15819     passing all values in registers, no matter the size.
15820
15821'-mepsilon'
15822'-mno-epsilon'
15823     Generate floating-point comparison instructions that compare with
15824     respect to the 'rE' epsilon register.
15825
15826'-mabi=mmixware'
15827'-mabi=gnu'
15828     Generate code that passes function parameters and return values
15829     that (in the called function) are seen as registers '$0' and up, as
15830     opposed to the GNU ABI which uses global registers '$231' and up.
15831
15832'-mzero-extend'
15833'-mno-zero-extend'
15834     When reading data from memory in sizes shorter than 64 bits, use
15835     (do not use) zero-extending load instructions by default, rather
15836     than sign-extending ones.
15837
15838'-mknuthdiv'
15839'-mno-knuthdiv'
15840     Make the result of a division yielding a remainder have the same
15841     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
15842     of the remainder follows the sign of the dividend.  Both methods
15843     are arithmetically valid, the latter being almost exclusively used.
15844
15845'-mtoplevel-symbols'
15846'-mno-toplevel-symbols'
15847     Prepend (do not prepend) a ':' to all global symbols, so the
15848     assembly code can be used with the 'PREFIX' assembly directive.
15849
15850'-melf'
15851     Generate an executable in the ELF format, rather than the default
15852     'mmo' format used by the 'mmix' simulator.
15853
15854'-mbranch-predict'
15855'-mno-branch-predict'
15856     Use (do not use) the probable-branch instructions, when static
15857     branch prediction indicates a probable branch.
15858
15859'-mbase-addresses'
15860'-mno-base-addresses'
15861     Generate (do not generate) code that uses _base addresses_.  Using
15862     a base address automatically generates a request (handled by the
15863     assembler and the linker) for a constant to be set up in a global
15864     register.  The register is used for one or more base address
15865     requests within the range 0 to 255 from the value held in the
15866     register.  The generally leads to short and fast code, but the
15867     number of different data items that can be addressed is limited.
15868     This means that a program that uses lots of static data may require
15869     '-mno-base-addresses'.
15870
15871'-msingle-exit'
15872'-mno-single-exit'
15873     Force (do not force) generated code to have a single exit point in
15874     each function.
15875
15876
15877File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
15878
158793.17.28 MN10300 Options
15880-----------------------
15881
15882These '-m' options are defined for Matsushita MN10300 architectures:
15883
15884'-mmult-bug'
15885     Generate code to avoid bugs in the multiply instructions for the
15886     MN10300 processors.  This is the default.
15887
15888'-mno-mult-bug'
15889     Do not generate code to avoid bugs in the multiply instructions for
15890     the MN10300 processors.
15891
15892'-mam33'
15893     Generate code using features specific to the AM33 processor.
15894
15895'-mno-am33'
15896     Do not generate code using features specific to the AM33 processor.
15897     This is the default.
15898
15899'-mam33-2'
15900     Generate code using features specific to the AM33/2.0 processor.
15901
15902'-mam34'
15903     Generate code using features specific to the AM34 processor.
15904
15905'-mtune=CPU-TYPE'
15906     Use the timing characteristics of the indicated CPU type when
15907     scheduling instructions.  This does not change the targeted
15908     processor type.  The CPU type must be one of 'mn10300', 'am33',
15909     'am33-2' or 'am34'.
15910
15911'-mreturn-pointer-on-d0'
15912     When generating a function that returns a pointer, return the
15913     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
15914     only in 'a0', and attempts to call such functions without a
15915     prototype result in errors.  Note that this option is on by
15916     default; use '-mno-return-pointer-on-d0' to disable it.
15917
15918'-mno-crt0'
15919     Do not link in the C run-time initialization object file.
15920
15921'-mrelax'
15922     Indicate to the linker that it should perform a relaxation
15923     optimization pass to shorten branches, calls and absolute memory
15924     addresses.  This option only has an effect when used on the command
15925     line for the final link step.
15926
15927     This option makes symbolic debugging impossible.
15928
15929'-mliw'
15930     Allow the compiler to generate _Long Instruction Word_ instructions
15931     if the target is the 'AM33' or later.  This is the default.  This
15932     option defines the preprocessor macro '__LIW__'.
15933
15934'-mnoliw'
15935     Do not allow the compiler to generate _Long Instruction Word_
15936     instructions.  This option defines the preprocessor macro
15937     '__NO_LIW__'.
15938
15939'-msetlb'
15940     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
15941     if the target is the 'AM33' or later.  This is the default.  This
15942     option defines the preprocessor macro '__SETLB__'.
15943
15944'-mnosetlb'
15945     Do not allow the compiler to generate _SETLB_ or _Lcc_
15946     instructions.  This option defines the preprocessor macro
15947     '__NO_SETLB__'.
15948
15949
15950File: gcc.info,  Node: Moxie Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
15951
159523.17.29 Moxie Options
15953---------------------
15954
15955'-meb'
15956     Generate big-endian code.  This is the default for 'moxie-*-*'
15957     configurations.
15958
15959'-mel'
15960     Generate little-endian code.
15961
15962'-mno-crt0'
15963     Do not link in the C run-time initialization object file.
15964
15965
15966File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Moxie Options,  Up: Submodel Options
15967
159683.17.30 PDP-11 Options
15969----------------------
15970
15971These options are defined for the PDP-11:
15972
15973'-mfpu'
15974     Use hardware FPP floating point.  This is the default.  (FIS
15975     floating point on the PDP-11/40 is not supported.)
15976
15977'-msoft-float'
15978     Do not use hardware floating point.
15979
15980'-mac0'
15981     Return floating-point results in ac0 (fr0 in Unix assembler
15982     syntax).
15983
15984'-mno-ac0'
15985     Return floating-point results in memory.  This is the default.
15986
15987'-m40'
15988     Generate code for a PDP-11/40.
15989
15990'-m45'
15991     Generate code for a PDP-11/45.  This is the default.
15992
15993'-m10'
15994     Generate code for a PDP-11/10.
15995
15996'-mbcopy-builtin'
15997     Use inline 'movmemhi' patterns for copying memory.  This is the
15998     default.
15999
16000'-mbcopy'
16001     Do not use inline 'movmemhi' patterns for copying memory.
16002
16003'-mint16'
16004'-mno-int32'
16005     Use 16-bit 'int'.  This is the default.
16006
16007'-mint32'
16008'-mno-int16'
16009     Use 32-bit 'int'.
16010
16011'-mfloat64'
16012'-mno-float32'
16013     Use 64-bit 'float'.  This is the default.
16014
16015'-mfloat32'
16016'-mno-float64'
16017     Use 32-bit 'float'.
16018
16019'-mabshi'
16020     Use 'abshi2' pattern.  This is the default.
16021
16022'-mno-abshi'
16023     Do not use 'abshi2' pattern.
16024
16025'-mbranch-expensive'
16026     Pretend that branches are expensive.  This is for experimenting
16027     with code generation only.
16028
16029'-mbranch-cheap'
16030     Do not pretend that branches are expensive.  This is the default.
16031
16032'-munix-asm'
16033     Use Unix assembler syntax.  This is the default when configured for
16034     'pdp11-*-bsd'.
16035
16036'-mdec-asm'
16037     Use DEC assembler syntax.  This is the default when configured for
16038     any PDP-11 target other than 'pdp11-*-bsd'.
16039
16040
16041File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
16042
160433.17.31 picoChip Options
16044------------------------
16045
16046These '-m' options are defined for picoChip implementations:
16047
16048'-mae=AE_TYPE'
16049     Set the instruction set, register set, and instruction scheduling
16050     parameters for array element type AE_TYPE.  Supported values for
16051     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
16052
16053     '-mae=ANY' selects a completely generic AE type.  Code generated
16054     with this option runs on any of the other AE types.  The code is
16055     not as efficient as it would be if compiled for a specific AE type,
16056     and some types of operation (e.g., multiplication) do not work
16057     properly on all types of AE.
16058
16059     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
16060     for compiled code, and is the default.
16061
16062     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
16063     option may suffer from poor performance of byte (char)
16064     manipulation, since the DSP AE does not provide hardware support
16065     for byte load/stores.
16066
16067'-msymbol-as-address'
16068     Enable the compiler to directly use a symbol name as an address in
16069     a load/store instruction, without first loading it into a register.
16070     Typically, the use of this option generates larger programs, which
16071     run faster than when the option isn't used.  However, the results
16072     vary from program to program, so it is left as a user option,
16073     rather than being permanently enabled.
16074
16075'-mno-inefficient-warnings'
16076     Disables warnings about the generation of inefficient code.  These
16077     warnings can be generated, for example, when compiling code that
16078     performs byte-level memory operations on the MAC AE type.  The MAC
16079     AE has no hardware support for byte-level memory operations, so all
16080     byte load/stores must be synthesized from word load/store
16081     operations.  This is inefficient and a warning is generated to
16082     indicate that you should rewrite the code to avoid byte operations,
16083     or to target an AE type that has the necessary hardware support.
16084     This option disables these warnings.
16085
16086
16087File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
16088
160893.17.32 PowerPC Options
16090-----------------------
16091
16092These are listed under *Note RS/6000 and PowerPC Options::.
16093
16094
16095File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
16096
160973.17.33 RL78 Options
16098--------------------
16099
16100'-msim'
16101     Links in additional target libraries to support operation within a
16102     simulator.
16103
16104'-mmul=none'
16105'-mmul=g13'
16106'-mmul=rl78'
16107     Specifies the type of hardware multiplication support to be used.
16108     The default is 'none', which uses software multiplication
16109     functions.  The 'g13' option is for the hardware multiply/divide
16110     peripheral only on the RL78/G13 targets.  The 'rl78' option is for
16111     the standard hardware multiplication defined in the RL78 software
16112     manual.
16113
16114
16115File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
16116
161173.17.34 IBM RS/6000 and PowerPC Options
16118---------------------------------------
16119
16120These '-m' options are defined for the IBM RS/6000 and PowerPC:
16121'-mpowerpc-gpopt'
16122'-mno-powerpc-gpopt'
16123'-mpowerpc-gfxopt'
16124'-mno-powerpc-gfxopt'
16125'-mpowerpc64'
16126'-mno-powerpc64'
16127'-mmfcrf'
16128'-mno-mfcrf'
16129'-mpopcntb'
16130'-mno-popcntb'
16131'-mpopcntd'
16132'-mno-popcntd'
16133'-mfprnd'
16134'-mno-fprnd'
16135'-mcmpb'
16136'-mno-cmpb'
16137'-mmfpgpr'
16138'-mno-mfpgpr'
16139'-mhard-dfp'
16140'-mno-hard-dfp'
16141     You use these options to specify which instructions are available
16142     on the processor you are using.  The default value of these options
16143     is determined when configuring GCC.  Specifying the
16144     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
16145     recommend you use the '-mcpu=CPU_TYPE' option rather than the
16146     options listed above.
16147
16148     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
16149     architecture instructions in the General Purpose group, including
16150     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
16151     GCC to use the optional PowerPC architecture instructions in the
16152     Graphics group, including floating-point select.
16153
16154     The '-mmfcrf' option allows GCC to generate the move from condition
16155     register field instruction implemented on the POWER4 processor and
16156     other processors that support the PowerPC V2.01 architecture.  The
16157     '-mpopcntb' option allows GCC to generate the popcount and
16158     double-precision FP reciprocal estimate instruction implemented on
16159     the POWER5 processor and other processors that support the PowerPC
16160     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
16161     the popcount instruction implemented on the POWER7 processor and
16162     other processors that support the PowerPC V2.06 architecture.  The
16163     '-mfprnd' option allows GCC to generate the FP round to integer
16164     instructions implemented on the POWER5+ processor and other
16165     processors that support the PowerPC V2.03 architecture.  The
16166     '-mcmpb' option allows GCC to generate the compare bytes
16167     instruction implemented on the POWER6 processor and other
16168     processors that support the PowerPC V2.05 architecture.  The
16169     '-mmfpgpr' option allows GCC to generate the FP move to/from
16170     general-purpose register instructions implemented on the POWER6X
16171     processor and other processors that support the extended PowerPC
16172     V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
16173     the decimal floating-point instructions implemented on some POWER
16174     processors.
16175
16176     The '-mpowerpc64' option allows GCC to generate the additional
16177     64-bit instructions that are found in the full PowerPC64
16178     architecture and to treat GPRs as 64-bit, doubleword quantities.
16179     GCC defaults to '-mno-powerpc64'.
16180
16181'-mcpu=CPU_TYPE'
16182     Set architecture type, register usage, and instruction scheduling
16183     parameters for machine type CPU_TYPE.  Supported values for
16184     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
16185     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
16186     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
16187     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
16188     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
16189     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
16190     'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'.
16191
16192     '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC
16193     and 64-bit PowerPC architecture machine types, with an appropriate,
16194     generic processor model assumed for scheduling purposes.
16195
16196     The other options specify a specific processor.  Code generated
16197     under those options runs best on that processor, and may not run at
16198     all on others.
16199
16200     The '-mcpu' options automatically enable or disable the following
16201     options:
16202
16203          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
16204          -mpopcntb -mpopcntd  -mpowerpc64
16205          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
16206          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
16207          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
16208          -mquad-memory -mquad-memory-atomic
16209
16210     The particular options set for any particular CPU varies between
16211     compiler versions, depending on what setting seems to produce
16212     optimal code for that CPU; it doesn't necessarily reflect the
16213     actual hardware's capabilities.  If you wish to set an individual
16214     option to a particular value, you may specify it after the '-mcpu'
16215     option, like '-mcpu=970 -mno-altivec'.
16216
16217     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
16218     or disabled by the '-mcpu' option at present because AIX does not
16219     have full support for these options.  You may still enable or
16220     disable them individually if you're sure it'll work in your
16221     environment.
16222
16223'-mtune=CPU_TYPE'
16224     Set the instruction scheduling parameters for machine type
16225     CPU_TYPE, but do not set the architecture type or register usage,
16226     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
16227     for '-mtune' as for '-mcpu'.  If both are specified, the code
16228     generated uses the architecture and registers set by '-mcpu', but
16229     the scheduling parameters set by '-mtune'.
16230
16231'-mcmodel=small'
16232     Generate PowerPC64 code for the small model: The TOC is limited to
16233     64k.
16234
16235'-mcmodel=medium'
16236     Generate PowerPC64 code for the medium model: The TOC and other
16237     static data may be up to a total of 4G in size.
16238
16239'-mcmodel=large'
16240     Generate PowerPC64 code for the large model: The TOC may be up to
16241     4G in size.  Other data and code is only limited by the 64-bit
16242     address space.
16243
16244'-maltivec'
16245'-mno-altivec'
16246     Generate code that uses (does not use) AltiVec instructions, and
16247     also enable the use of built-in functions that allow more direct
16248     access to the AltiVec instruction set.  You may also need to set
16249     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
16250     enhancements.
16251
16252     When '-maltivec' is used, rather than '-maltivec=le' or
16253     '-maltivec=be', the element order for Altivec intrinsics such as
16254     'vec_splat', 'vec_extract', and 'vec_insert' will match array
16255     element order corresponding to the endianness of the target.  That
16256     is, element zero identifies the leftmost element in a vector
16257     register when targeting a big-endian platform, and identifies the
16258     rightmost element in a vector register when targeting a
16259     little-endian platform.
16260
16261'-maltivec=be'
16262     Generate Altivec instructions using big-endian element order,
16263     regardless of whether the target is big- or little-endian.  This is
16264     the default when targeting a big-endian platform.
16265
16266     The element order is used to interpret element numbers in Altivec
16267     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
16268     By default, these will match array element order corresponding to
16269     the endianness for the target.
16270
16271'-maltivec=le'
16272     Generate Altivec instructions using little-endian element order,
16273     regardless of whether the target is big- or little-endian.  This is
16274     the default when targeting a little-endian platform.  This option
16275     is currently ignored when targeting a big-endian platform.
16276
16277     The element order is used to interpret element numbers in Altivec
16278     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
16279     By default, these will match array element order corresponding to
16280     the endianness for the target.
16281
16282'-mvrsave'
16283'-mno-vrsave'
16284     Generate VRSAVE instructions when generating AltiVec code.
16285
16286'-mgen-cell-microcode'
16287     Generate Cell microcode instructions.
16288
16289'-mwarn-cell-microcode'
16290     Warn when a Cell microcode instruction is emitted.  An example of a
16291     Cell microcode instruction is a variable shift.
16292
16293'-msecure-plt'
16294     Generate code that allows 'ld' and 'ld.so' to build executables and
16295     shared libraries with non-executable '.plt' and '.got' sections.
16296     This is a PowerPC 32-bit SYSV ABI option.
16297
16298'-mbss-plt'
16299     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
16300     and requires '.plt' and '.got' sections that are both writable and
16301     executable.  This is a PowerPC 32-bit SYSV ABI option.
16302
16303'-misel'
16304'-mno-isel'
16305     This switch enables or disables the generation of ISEL
16306     instructions.
16307
16308'-misel=YES/NO'
16309     This switch has been deprecated.  Use '-misel' and '-mno-isel'
16310     instead.
16311
16312'-mspe'
16313'-mno-spe'
16314     This switch enables or disables the generation of SPE simd
16315     instructions.
16316
16317'-mpaired'
16318'-mno-paired'
16319     This switch enables or disables the generation of PAIRED simd
16320     instructions.
16321
16322'-mspe=YES/NO'
16323     This option has been deprecated.  Use '-mspe' and '-mno-spe'
16324     instead.
16325
16326'-mvsx'
16327'-mno-vsx'
16328     Generate code that uses (does not use) vector/scalar (VSX)
16329     instructions, and also enable the use of built-in functions that
16330     allow more direct access to the VSX instruction set.
16331
16332'-mcrypto'
16333'-mno-crypto'
16334     Enable the use (disable) of the built-in functions that allow
16335     direct access to the cryptographic instructions that were added in
16336     version 2.07 of the PowerPC ISA.
16337
16338'-mdirect-move'
16339'-mno-direct-move'
16340     Generate code that uses (does not use) the instructions to move
16341     data between the general purpose registers and the vector/scalar
16342     (VSX) registers that were added in version 2.07 of the PowerPC ISA.
16343
16344'-mpower8-fusion'
16345'-mno-power8-fusion'
16346     Generate code that keeps (does not keeps) some integer operations
16347     adjacent so that the instructions can be fused together on power8
16348     and later processors.
16349
16350'-mpower8-vector'
16351'-mno-power8-vector'
16352     Generate code that uses (does not use) the vector and scalar
16353     instructions that were added in version 2.07 of the PowerPC ISA.
16354     Also enable the use of built-in functions that allow more direct
16355     access to the vector instructions.
16356
16357'-mquad-memory'
16358'-mno-quad-memory'
16359     Generate code that uses (does not use) the non-atomic quad word
16360     memory instructions.  The '-mquad-memory' option requires use of
16361     64-bit mode.
16362
16363'-mquad-memory-atomic'
16364'-mno-quad-memory-atomic'
16365     Generate code that uses (does not use) the atomic quad word memory
16366     instructions.  The '-mquad-memory-atomic' option requires use of
16367     64-bit mode.
16368
16369'-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
16370'-mfloat-gprs'
16371     This switch enables or disables the generation of floating-point
16372     operations on the general-purpose registers for architectures that
16373     support it.
16374
16375     The argument YES or SINGLE enables the use of single-precision
16376     floating-point operations.
16377
16378     The argument DOUBLE enables the use of single and double-precision
16379     floating-point operations.
16380
16381     The argument NO disables floating-point operations on the
16382     general-purpose registers.
16383
16384     This option is currently only available on the MPC854x.
16385
16386'-m32'
16387'-m64'
16388     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
16389     targets (including GNU/Linux).  The 32-bit environment sets int,
16390     long and pointer to 32 bits and generates code that runs on any
16391     PowerPC variant.  The 64-bit environment sets int to 32 bits and
16392     long and pointer to 64 bits, and generates code for PowerPC64, as
16393     for '-mpowerpc64'.
16394
16395'-mfull-toc'
16396'-mno-fp-in-toc'
16397'-mno-sum-in-toc'
16398'-mminimal-toc'
16399     Modify generation of the TOC (Table Of Contents), which is created
16400     for every executable file.  The '-mfull-toc' option is selected by
16401     default.  In that case, GCC allocates at least one TOC entry for
16402     each unique non-automatic variable reference in your program.  GCC
16403     also places floating-point constants in the TOC.  However, only
16404     16,384 entries are available in the TOC.
16405
16406     If you receive a linker error message that saying you have
16407     overflowed the available TOC space, you can reduce the amount of
16408     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
16409     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
16410     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
16411     code to calculate the sum of an address and a constant at run time
16412     instead of putting that sum into the TOC.  You may specify one or
16413     both of these options.  Each causes GCC to produce very slightly
16414     slower and larger code at the expense of conserving TOC space.
16415
16416     If you still run out of space in the TOC even when you specify both
16417     of these options, specify '-mminimal-toc' instead.  This option
16418     causes GCC to make only one TOC entry for every file.  When you
16419     specify this option, GCC produces code that is slower and larger
16420     but which uses extremely little TOC space.  You may wish to use
16421     this option only on files that contain less frequently-executed
16422     code.
16423
16424'-maix64'
16425'-maix32'
16426     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
16427     64-bit 'long' type, and the infrastructure needed to support them.
16428     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
16429     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
16430     to '-maix32'.
16431
16432'-mxl-compat'
16433'-mno-xl-compat'
16434     Produce code that conforms more closely to IBM XL compiler
16435     semantics when using AIX-compatible ABI.  Pass floating-point
16436     arguments to prototyped functions beyond the register save area
16437     (RSA) on the stack in addition to argument FPRs.  Do not assume
16438     that most significant double in 128-bit long double value is
16439     properly rounded when comparing values and converting to double.
16440     Use XL symbol names for long double support routines.
16441
16442     The AIX calling convention was extended but not initially
16443     documented to handle an obscure K&R C case of calling a function
16444     that takes the address of its arguments with fewer arguments than
16445     declared.  IBM XL compilers access floating-point arguments that do
16446     not fit in the RSA from the stack when a subroutine is compiled
16447     without optimization.  Because always storing floating-point
16448     arguments on the stack is inefficient and rarely needed, this
16449     option is not enabled by default and only is necessary when calling
16450     subroutines compiled by IBM XL compilers without optimization.
16451
16452'-mpe'
16453     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
16454     application written to use message passing with special startup
16455     code to enable the application to run.  The system must have PE
16456     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
16457     'specs' file must be overridden with the '-specs=' option to
16458     specify the appropriate directory location.  The Parallel
16459     Environment does not support threads, so the '-mpe' option and the
16460     '-pthread' option are incompatible.
16461
16462'-malign-natural'
16463'-malign-power'
16464     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
16465     '-malign-natural' overrides the ABI-defined alignment of larger
16466     types, such as floating-point doubles, on their natural size-based
16467     boundary.  The option '-malign-power' instructs GCC to follow the
16468     ABI-specified alignment rules.  GCC defaults to the standard
16469     alignment defined in the ABI.
16470
16471     On 64-bit Darwin, natural alignment is the default, and
16472     '-malign-power' is not supported.
16473
16474'-msoft-float'
16475'-mhard-float'
16476     Generate code that does not use (uses) the floating-point register
16477     set.  Software floating-point emulation is provided if you use the
16478     '-msoft-float' option, and pass the option to GCC when linking.
16479
16480'-msingle-float'
16481'-mdouble-float'
16482     Generate code for single- or double-precision floating-point
16483     operations.  '-mdouble-float' implies '-msingle-float'.
16484
16485'-msimple-fpu'
16486     Do not generate 'sqrt' and 'div' instructions for hardware
16487     floating-point unit.
16488
16489'-mfpu=NAME'
16490     Specify type of floating-point unit.  Valid values for NAME are
16491     'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite'
16492     (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full'
16493     (equivalent to '-msingle-float'), and 'dp_full' (equivalent to
16494     '-mdouble-float').
16495
16496'-mxilinx-fpu'
16497     Perform optimizations for the floating-point unit on Xilinx PPC
16498     405/440.
16499
16500'-mmultiple'
16501'-mno-multiple'
16502     Generate code that uses (does not use) the load multiple word
16503     instructions and the store multiple word instructions.  These
16504     instructions are generated by default on POWER systems, and not
16505     generated on PowerPC systems.  Do not use '-mmultiple' on
16506     little-endian PowerPC systems, since those instructions do not work
16507     when the processor is in little-endian mode.  The exceptions are
16508     PPC740 and PPC750 which permit these instructions in little-endian
16509     mode.
16510
16511'-mstring'
16512'-mno-string'
16513     Generate code that uses (does not use) the load string instructions
16514     and the store string word instructions to save multiple registers
16515     and do small block moves.  These instructions are generated by
16516     default on POWER systems, and not generated on PowerPC systems.  Do
16517     not use '-mstring' on little-endian PowerPC systems, since those
16518     instructions do not work when the processor is in little-endian
16519     mode.  The exceptions are PPC740 and PPC750 which permit these
16520     instructions in little-endian mode.
16521
16522'-mupdate'
16523'-mno-update'
16524     Generate code that uses (does not use) the load or store
16525     instructions that update the base register to the address of the
16526     calculated memory location.  These instructions are generated by
16527     default.  If you use '-mno-update', there is a small window between
16528     the time that the stack pointer is updated and the address of the
16529     previous frame is stored, which means code that walks the stack
16530     frame across interrupts or signals may get corrupted data.
16531
16532'-mavoid-indexed-addresses'
16533'-mno-avoid-indexed-addresses'
16534     Generate code that tries to avoid (not avoid) the use of indexed
16535     load or store instructions.  These instructions can incur a
16536     performance penalty on Power6 processors in certain situations,
16537     such as when stepping through large arrays that cross a 16M
16538     boundary.  This option is enabled by default when targeting Power6
16539     and disabled otherwise.
16540
16541'-mfused-madd'
16542'-mno-fused-madd'
16543     Generate code that uses (does not use) the floating-point multiply
16544     and accumulate instructions.  These instructions are generated by
16545     default if hardware floating point is used.  The machine-dependent
16546     '-mfused-madd' option is now mapped to the machine-independent
16547     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
16548     '-ffp-contract=off'.
16549
16550'-mmulhw'
16551'-mno-mulhw'
16552     Generate code that uses (does not use) the half-word multiply and
16553     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
16554     processors.  These instructions are generated by default when
16555     targeting those processors.
16556
16557'-mdlmzb'
16558'-mno-dlmzb'
16559     Generate code that uses (does not use) the string-search 'dlmzb'
16560     instruction on the IBM 405, 440, 464 and 476 processors.  This
16561     instruction is generated by default when targeting those
16562     processors.
16563
16564'-mno-bit-align'
16565'-mbit-align'
16566     On System V.4 and embedded PowerPC systems do not (do) force
16567     structures and unions that contain bit-fields to be aligned to the
16568     base type of the bit-field.
16569
16570     For example, by default a structure containing nothing but 8
16571     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
16572     and has a size of 4 bytes.  By using '-mno-bit-align', the
16573     structure is aligned to a 1-byte boundary and is 1 byte in size.
16574
16575'-mno-strict-align'
16576'-mstrict-align'
16577     On System V.4 and embedded PowerPC systems do not (do) assume that
16578     unaligned memory references are handled by the system.
16579
16580'-mrelocatable'
16581'-mno-relocatable'
16582     Generate code that allows (does not allow) a static executable to
16583     be relocated to a different address at run time.  A simple embedded
16584     PowerPC system loader should relocate the entire contents of
16585     '.got2' and 4-byte locations listed in the '.fixup' section, a
16586     table of 32-bit addresses generated by this option.  For this to
16587     work, all objects linked together must be compiled with
16588     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
16589     aligns the stack to an 8-byte boundary.
16590
16591'-mrelocatable-lib'
16592'-mno-relocatable-lib'
16593     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
16594     section to allow static executables to be relocated at run time,
16595     but '-mrelocatable-lib' does not use the smaller stack alignment of
16596     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
16597     linked with objects compiled with any combination of the
16598     '-mrelocatable' options.
16599
16600'-mno-toc'
16601'-mtoc'
16602     On System V.4 and embedded PowerPC systems do not (do) assume that
16603     register 2 contains a pointer to a global area pointing to the
16604     addresses used in the program.
16605
16606'-mlittle'
16607'-mlittle-endian'
16608     On System V.4 and embedded PowerPC systems compile code for the
16609     processor in little-endian mode.  The '-mlittle-endian' option is
16610     the same as '-mlittle'.
16611
16612'-mbig'
16613'-mbig-endian'
16614     On System V.4 and embedded PowerPC systems compile code for the
16615     processor in big-endian mode.  The '-mbig-endian' option is the
16616     same as '-mbig'.
16617
16618'-mdynamic-no-pic'
16619     On Darwin and Mac OS X systems, compile code so that it is not
16620     relocatable, but that its external references are relocatable.  The
16621     resulting code is suitable for applications, but not shared
16622     libraries.
16623
16624'-msingle-pic-base'
16625     Treat the register used for PIC addressing as read-only, rather
16626     than loading it in the prologue for each function.  The runtime
16627     system is responsible for initializing this register with an
16628     appropriate value before execution begins.
16629
16630'-mprioritize-restricted-insns=PRIORITY'
16631     This option controls the priority that is assigned to dispatch-slot
16632     restricted instructions during the second scheduling pass.  The
16633     argument PRIORITY takes the value '0', '1', or '2' to assign no,
16634     highest, or second-highest (respectively) priority to dispatch-slot
16635     restricted instructions.
16636
16637'-msched-costly-dep=DEPENDENCE_TYPE'
16638     This option controls which dependences are considered costly by the
16639     target during instruction scheduling.  The argument DEPENDENCE_TYPE
16640     takes one of the following values:
16641
16642     'no'
16643          No dependence is costly.
16644
16645     'all'
16646          All dependences are costly.
16647
16648     'true_store_to_load'
16649          A true dependence from store to load is costly.
16650
16651     'store_to_load'
16652          Any dependence from store to load is costly.
16653
16654     NUMBER
16655          Any dependence for which the latency is greater than or equal
16656          to NUMBER is costly.
16657
16658'-minsert-sched-nops=SCHEME'
16659     This option controls which NOP insertion scheme is used during the
16660     second scheduling pass.  The argument SCHEME takes one of the
16661     following values:
16662
16663     'no'
16664          Don't insert NOPs.
16665
16666     'pad'
16667          Pad with NOPs any dispatch group that has vacant issue slots,
16668          according to the scheduler's grouping.
16669
16670     'regroup_exact'
16671          Insert NOPs to force costly dependent insns into separate
16672          groups.  Insert exactly as many NOPs as needed to force an
16673          insn to a new group, according to the estimated processor
16674          grouping.
16675
16676     NUMBER
16677          Insert NOPs to force costly dependent insns into separate
16678          groups.  Insert NUMBER NOPs to force an insn to a new group.
16679
16680'-mcall-sysv'
16681     On System V.4 and embedded PowerPC systems compile code using
16682     calling conventions that adhere to the March 1995 draft of the
16683     System V Application Binary Interface, PowerPC processor
16684     supplement.  This is the default unless you configured GCC using
16685     'powerpc-*-eabiaix'.
16686
16687'-mcall-sysv-eabi'
16688'-mcall-eabi'
16689     Specify both '-mcall-sysv' and '-meabi' options.
16690
16691'-mcall-sysv-noeabi'
16692     Specify both '-mcall-sysv' and '-mno-eabi' options.
16693
16694'-mcall-aixdesc'
16695     On System V.4 and embedded PowerPC systems compile code for the AIX
16696     operating system.
16697
16698'-mcall-linux'
16699     On System V.4 and embedded PowerPC systems compile code for the
16700     Linux-based GNU system.
16701
16702'-mcall-freebsd'
16703     On System V.4 and embedded PowerPC systems compile code for the
16704     FreeBSD operating system.
16705
16706'-mcall-netbsd'
16707     On System V.4 and embedded PowerPC systems compile code for the
16708     NetBSD operating system.
16709
16710'-mcall-openbsd'
16711     On System V.4 and embedded PowerPC systems compile code for the
16712     OpenBSD operating system.
16713
16714'-maix-struct-return'
16715     Return all structures in memory (as specified by the AIX ABI).
16716
16717'-msvr4-struct-return'
16718     Return structures smaller than 8 bytes in registers (as specified
16719     by the SVR4 ABI).
16720
16721'-mabi=ABI-TYPE'
16722     Extend the current ABI with a particular extension, or remove such
16723     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
16724     IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
16725
16726'-mabi=spe'
16727     Extend the current ABI with SPE ABI extensions.  This does not
16728     change the default ABI, instead it adds the SPE ABI extensions to
16729     the current ABI.
16730
16731'-mabi=no-spe'
16732     Disable Book-E SPE ABI extensions for the current ABI.
16733
16734'-mabi=ibmlongdouble'
16735     Change the current ABI to use IBM extended-precision long double.
16736     This is a PowerPC 32-bit SYSV ABI option.
16737
16738'-mabi=ieeelongdouble'
16739     Change the current ABI to use IEEE extended-precision long double.
16740     This is a PowerPC 32-bit Linux ABI option.
16741
16742'-mabi=elfv1'
16743     Change the current ABI to use the ELFv1 ABI. This is the default
16744     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
16745     ABI requires special system support and is likely to fail in
16746     spectacular ways.
16747
16748'-mabi=elfv2'
16749     Change the current ABI to use the ELFv2 ABI. This is the default
16750     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
16751     ABI requires special system support and is likely to fail in
16752     spectacular ways.
16753
16754'-mprototype'
16755'-mno-prototype'
16756     On System V.4 and embedded PowerPC systems assume that all calls to
16757     variable argument functions are properly prototyped.  Otherwise,
16758     the compiler must insert an instruction before every non-prototyped
16759     call to set or clear bit 6 of the condition code register (CR) to
16760     indicate whether floating-point values are passed in the
16761     floating-point registers in case the function takes variable
16762     arguments.  With '-mprototype', only calls to prototyped variable
16763     argument functions set or clear the bit.
16764
16765'-msim'
16766     On embedded PowerPC systems, assume that the startup module is
16767     called 'sim-crt0.o' and that the standard C libraries are
16768     'libsim.a' and 'libc.a'.  This is the default for
16769     'powerpc-*-eabisim' configurations.
16770
16771'-mmvme'
16772     On embedded PowerPC systems, assume that the startup module is
16773     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
16774     'libc.a'.
16775
16776'-mads'
16777     On embedded PowerPC systems, assume that the startup module is
16778     called 'crt0.o' and the standard C libraries are 'libads.a' and
16779     'libc.a'.
16780
16781'-myellowknife'
16782     On embedded PowerPC systems, assume that the startup module is
16783     called 'crt0.o' and the standard C libraries are 'libyk.a' and
16784     'libc.a'.
16785
16786'-mvxworks'
16787     On System V.4 and embedded PowerPC systems, specify that you are
16788     compiling for a VxWorks system.
16789
16790'-memb'
16791     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
16792     header to indicate that 'eabi' extended relocations are used.
16793
16794'-meabi'
16795'-mno-eabi'
16796     On System V.4 and embedded PowerPC systems do (do not) adhere to
16797     the Embedded Applications Binary Interface (EABI), which is a set
16798     of modifications to the System V.4 specifications.  Selecting
16799     '-meabi' means that the stack is aligned to an 8-byte boundary, a
16800     function '__eabi' is called from 'main' to set up the EABI
16801     environment, and the '-msdata' option can use both 'r2' and 'r13'
16802     to point to two separate small data areas.  Selecting '-mno-eabi'
16803     means that the stack is aligned to a 16-byte boundary, no EABI
16804     initialization function is called from 'main', and the '-msdata'
16805     option only uses 'r13' to point to a single small data area.  The
16806     '-meabi' option is on by default if you configured GCC using one of
16807     the 'powerpc*-*-eabi*' options.
16808
16809'-msdata=eabi'
16810     On System V.4 and embedded PowerPC systems, put small initialized
16811     'const' global and static data in the '.sdata2' section, which is
16812     pointed to by register 'r2'.  Put small initialized non-'const'
16813     global and static data in the '.sdata' section, which is pointed to
16814     by register 'r13'.  Put small uninitialized global and static data
16815     in the '.sbss' section, which is adjacent to the '.sdata' section.
16816     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
16817     option.  The '-msdata=eabi' option also sets the '-memb' option.
16818
16819'-msdata=sysv'
16820     On System V.4 and embedded PowerPC systems, put small global and
16821     static data in the '.sdata' section, which is pointed to by
16822     register 'r13'.  Put small uninitialized global and static data in
16823     the '.sbss' section, which is adjacent to the '.sdata' section.
16824     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
16825     option.
16826
16827'-msdata=default'
16828'-msdata'
16829     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
16830     compile code the same as '-msdata=eabi', otherwise compile code the
16831     same as '-msdata=sysv'.
16832
16833'-msdata=data'
16834     On System V.4 and embedded PowerPC systems, put small global data
16835     in the '.sdata' section.  Put small uninitialized global data in
16836     the '.sbss' section.  Do not use register 'r13' to address small
16837     data however.  This is the default behavior unless other '-msdata'
16838     options are used.
16839
16840'-msdata=none'
16841'-mno-sdata'
16842     On embedded PowerPC systems, put all initialized global and static
16843     data in the '.data' section, and all uninitialized data in the
16844     '.bss' section.
16845
16846'-mblock-move-inline-limit=NUM'
16847     Inline all block moves (such as calls to 'memcpy' or structure
16848     copies) less than or equal to NUM bytes.  The minimum value for NUM
16849     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
16850     default value is target-specific.
16851
16852'-G NUM'
16853     On embedded PowerPC systems, put global and static items less than
16854     or equal to NUM bytes into the small data or BSS sections instead
16855     of the normal data or BSS section.  By default, NUM is 8.  The '-G
16856     NUM' switch is also passed to the linker.  All modules should be
16857     compiled with the same '-G NUM' value.
16858
16859'-mregnames'
16860'-mno-regnames'
16861     On System V.4 and embedded PowerPC systems do (do not) emit
16862     register names in the assembly language output using symbolic
16863     forms.
16864
16865'-mlongcall'
16866'-mno-longcall'
16867     By default assume that all calls are far away so that a longer and
16868     more expensive calling sequence is required.  This is required for
16869     calls farther than 32 megabytes (33,554,432 bytes) from the current
16870     location.  A short call is generated if the compiler knows the call
16871     cannot be that far away.  This setting can be overridden by the
16872     'shortcall' function attribute, or by '#pragma longcall(0)'.
16873
16874     Some linkers are capable of detecting out-of-range calls and
16875     generating glue code on the fly.  On these systems, long calls are
16876     unnecessary and generate slower code.  As of this writing, the AIX
16877     linker can do this, as can the GNU linker for PowerPC/64.  It is
16878     planned to add this feature to the GNU linker for 32-bit PowerPC
16879     systems as well.
16880
16881     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
16882     L42', plus a "branch island" (glue code).  The two target addresses
16883     represent the callee and the branch island.  The Darwin/PPC linker
16884     prefers the first address and generates a 'bl callee' if the PPC
16885     'bl' instruction reaches the callee directly; otherwise, the linker
16886     generates 'bl L42' to call the branch island.  The branch island is
16887     appended to the body of the calling function; it computes the full
16888     32-bit address of the callee and jumps to it.
16889
16890     On Mach-O (Darwin) systems, this option directs the compiler emit
16891     to the glue for every direct call, and the Darwin linker decides
16892     whether to use or discard it.
16893
16894     In the future, GCC may ignore all longcall specifications when the
16895     linker is known to generate glue.
16896
16897'-mtls-markers'
16898'-mno-tls-markers'
16899     Mark (do not mark) calls to '__tls_get_addr' with a relocation
16900     specifying the function argument.  The relocation allows the linker
16901     to reliably associate function call with argument setup
16902     instructions for TLS optimization, which in turn allows GCC to
16903     better schedule the sequence.
16904
16905'-pthread'
16906     Adds support for multithreading with the "pthreads" library.  This
16907     option sets flags for both the preprocessor and linker.
16908
16909'-mrecip'
16910'-mno-recip'
16911     This option enables use of the reciprocal estimate and reciprocal
16912     square root estimate instructions with additional Newton-Raphson
16913     steps to increase precision instead of doing a divide or square
16914     root and divide for floating-point arguments.  You should use the
16915     '-ffast-math' option when using '-mrecip' (or at least
16916     '-funsafe-math-optimizations', '-finite-math-only',
16917     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
16918     throughput of the sequence is generally higher than the throughput
16919     of the non-reciprocal instruction, the precision of the sequence
16920     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
16921     0.99999994) for reciprocal square roots.
16922
16923'-mrecip=OPT'
16924     This option controls which reciprocal estimate instructions may be
16925     used.  OPT is a comma-separated list of options, which may be
16926     preceded by a '!' to invert the option: 'all': enable all estimate
16927     instructions, 'default': enable the default instructions,
16928     equivalent to '-mrecip', 'none': disable all estimate instructions,
16929     equivalent to '-mno-recip'; 'div': enable the reciprocal
16930     approximation instructions for both single and double precision;
16931     'divf': enable the single-precision reciprocal approximation
16932     instructions; 'divd': enable the double-precision reciprocal
16933     approximation instructions; 'rsqrt': enable the reciprocal square
16934     root approximation instructions for both single and double
16935     precision; 'rsqrtf': enable the single-precision reciprocal square
16936     root approximation instructions; 'rsqrtd': enable the
16937     double-precision reciprocal square root approximation instructions;
16938
16939     So, for example, '-mrecip=all,!rsqrtd' enables all of the
16940     reciprocal estimate instructions, except for the 'FRSQRTE',
16941     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
16942     double-precision reciprocal square root calculations.
16943
16944'-mrecip-precision'
16945'-mno-recip-precision'
16946     Assume (do not assume) that the reciprocal estimate instructions
16947     provide higher-precision estimates than is mandated by the PowerPC
16948     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
16949     automatically selects '-mrecip-precision'.  The double-precision
16950     square root estimate instructions are not generated by default on
16951     low-precision machines, since they do not provide an estimate that
16952     converges after three steps.
16953
16954'-mveclibabi=TYPE'
16955     Specifies the ABI type to use for vectorizing intrinsics using an
16956     external library.  The only type supported at present is 'mass',
16957     which specifies to use IBM's Mathematical Acceleration Subsystem
16958     (MASS) libraries for vectorizing intrinsics using external
16959     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
16960     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
16961     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
16962     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
16963     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
16964     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
16965     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
16966     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
16967     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
16968     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
16969     and '-funsafe-math-optimizations' must also be enabled.  The MASS
16970     libraries must be specified at link time.
16971
16972'-mfriz'
16973'-mno-friz'
16974     Generate (do not generate) the 'friz' instruction when the
16975     '-funsafe-math-optimizations' option is used to optimize rounding
16976     of floating-point values to 64-bit integer and back to floating
16977     point.  The 'friz' instruction does not return the same value if
16978     the floating-point number is too large to fit in an integer.
16979
16980'-mpointers-to-nested-functions'
16981'-mno-pointers-to-nested-functions'
16982     Generate (do not generate) code to load up the static chain
16983     register (R11) when calling through a pointer on AIX and 64-bit
16984     Linux systems where a function pointer points to a 3-word
16985     descriptor giving the function address, TOC value to be loaded in
16986     register R2, and static chain value to be loaded in register R11.
16987     The '-mpointers-to-nested-functions' is on by default.  You cannot
16988     call through pointers to nested functions or pointers to functions
16989     compiled in other languages that use the static chain if you use
16990     the '-mno-pointers-to-nested-functions'.
16991
16992'-msave-toc-indirect'
16993'-mno-save-toc-indirect'
16994     Generate (do not generate) code to save the TOC value in the
16995     reserved stack location in the function prologue if the function
16996     calls through a pointer on AIX and 64-bit Linux systems.  If the
16997     TOC value is not saved in the prologue, it is saved just before the
16998     call through the pointer.  The '-mno-save-toc-indirect' option is
16999     the default.
17000
17001'-mcompat-align-parm'
17002'-mno-compat-align-parm'
17003     Generate (do not generate) code to pass structure parameters with a
17004     maximum alignment of 64 bits, for compatibility with older versions
17005     of GCC.
17006
17007     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
17008     structure parameter on a 128-bit boundary when that structure
17009     contained a member requiring 128-bit alignment.  This is corrected
17010     in more recent versions of GCC. This option may be used to generate
17011     code that is compatible with functions compiled with older versions
17012     of GCC.
17013
17014     In this version of the compiler, the '-mcompat-align-parm' is the
17015     default, except when using the Linux ELFv2 ABI.
17016
17017
17018File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
17019
170203.17.35 RX Options
17021------------------
17022
17023These command-line options are defined for RX targets:
17024
17025'-m64bit-doubles'
17026'-m32bit-doubles'
17027     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
17028     bits ('-m32bit-doubles') in size.  The default is
17029     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
17030     32-bit values, which is why the default is '-m32bit-doubles'.
17031
17032'-fpu'
17033'-nofpu'
17034     Enables ('-fpu') or disables ('-nofpu') the use of RX
17035     floating-point hardware.  The default is enabled for the RX600
17036     series and disabled for the RX200 series.
17037
17038     Floating-point instructions are only generated for 32-bit
17039     floating-point values, however, so the FPU hardware is not used for
17040     doubles if the '-m64bit-doubles' option is used.
17041
17042     _Note_ If the '-fpu' option is enabled then
17043     '-funsafe-math-optimizations' is also enabled automatically.  This
17044     is because the RX FPU instructions are themselves unsafe.
17045
17046'-mcpu=NAME'
17047     Selects the type of RX CPU to be targeted.  Currently three types
17048     are supported, the generic RX600 and RX200 series hardware and the
17049     specific RX610 CPU. The default is RX600.
17050
17051     The only difference between RX600 and RX610 is that the RX610 does
17052     not support the 'MVTIPL' instruction.
17053
17054     The RX200 series does not have a hardware floating-point unit and
17055     so '-nofpu' is enabled by default when this type is selected.
17056
17057'-mbig-endian-data'
17058'-mlittle-endian-data'
17059     Store data (but not code) in the big-endian format.  The default is
17060     '-mlittle-endian-data', i.e. to store data in the little-endian
17061     format.
17062
17063'-msmall-data-limit=N'
17064     Specifies the maximum size in bytes of global and static variables
17065     which can be placed into the small data area.  Using the small data
17066     area can lead to smaller and faster code, but the size of area is
17067     limited and it is up to the programmer to ensure that the area does
17068     not overflow.  Also when the small data area is used one of the
17069     RX's registers (usually 'r13') is reserved for use pointing to this
17070     area, so it is no longer available for use by the compiler.  This
17071     could result in slower and/or larger code if variables are pushed
17072     onto the stack instead of being held in this register.
17073
17074     Note, common variables (variables that have not been initialized)
17075     and constants are not placed into the small data area as they are
17076     assigned to other sections in the output executable.
17077
17078     The default value is zero, which disables this feature.  Note, this
17079     feature is not enabled by default with higher optimization levels
17080     ('-O2' etc) because of the potentially detrimental effects of
17081     reserving a register.  It is up to the programmer to experiment and
17082     discover whether this feature is of benefit to their program.  See
17083     the description of the '-mpid' option for a description of how the
17084     actual register to hold the small data area pointer is chosen.
17085
17086'-msim'
17087'-mno-sim'
17088     Use the simulator runtime.  The default is to use the libgloss
17089     board-specific runtime.
17090
17091'-mas100-syntax'
17092'-mno-as100-syntax'
17093     When generating assembler output use a syntax that is compatible
17094     with Renesas's AS100 assembler.  This syntax can also be handled by
17095     the GAS assembler, but it has some restrictions so it is not
17096     generated by default.
17097
17098'-mmax-constant-size=N'
17099     Specifies the maximum size, in bytes, of a constant that can be
17100     used as an operand in a RX instruction.  Although the RX
17101     instruction set does allow constants of up to 4 bytes in length to
17102     be used in instructions, a longer value equates to a longer
17103     instruction.  Thus in some circumstances it can be beneficial to
17104     restrict the size of constants that are used in instructions.
17105     Constants that are too big are instead placed into a constant pool
17106     and referenced via register indirection.
17107
17108     The value N can be between 0 and 4.  A value of 0 (the default) or
17109     4 means that constants of any size are allowed.
17110
17111'-mrelax'
17112     Enable linker relaxation.  Linker relaxation is a process whereby
17113     the linker attempts to reduce the size of a program by finding
17114     shorter versions of various instructions.  Disabled by default.
17115
17116'-mint-register=N'
17117     Specify the number of registers to reserve for fast interrupt
17118     handler functions.  The value N can be between 0 and 4.  A value of
17119     1 means that register 'r13' is reserved for the exclusive use of
17120     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
17121     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
17122     reserves 'r13' through 'r10'.  A value of 0, the default, does not
17123     reserve any registers.
17124
17125'-msave-acc-in-interrupts'
17126     Specifies that interrupt handler functions should preserve the
17127     accumulator register.  This is only necessary if normal code might
17128     use the accumulator register, for example because it performs
17129     64-bit multiplications.  The default is to ignore the accumulator
17130     as this makes the interrupt handlers faster.
17131
17132'-mpid'
17133'-mno-pid'
17134     Enables the generation of position independent data.  When enabled
17135     any access to constant data is done via an offset from a base
17136     address held in a register.  This allows the location of constant
17137     data to be determined at run time without requiring the executable
17138     to be relocated, which is a benefit to embedded applications with
17139     tight memory constraints.  Data that can be modified is not
17140     affected by this option.
17141
17142     Note, using this feature reserves a register, usually 'r13', for
17143     the constant data base address.  This can result in slower and/or
17144     larger code, especially in complicated functions.
17145
17146     The actual register chosen to hold the constant data base address
17147     depends upon whether the '-msmall-data-limit' and/or the
17148     '-mint-register' command-line options are enabled.  Starting with
17149     register 'r13' and proceeding downwards, registers are allocated
17150     first to satisfy the requirements of '-mint-register', then '-mpid'
17151     and finally '-msmall-data-limit'.  Thus it is possible for the
17152     small data area register to be 'r8' if both '-mint-register=4' and
17153     '-mpid' are specified on the command line.
17154
17155     By default this feature is not enabled.  The default can be
17156     restored via the '-mno-pid' command-line option.
17157
17158'-mno-warn-multiple-fast-interrupts'
17159'-mwarn-multiple-fast-interrupts'
17160     Prevents GCC from issuing a warning message if it finds more than
17161     one fast interrupt handler when it is compiling a file.  The
17162     default is to issue a warning for each extra fast interrupt handler
17163     found, as the RX only supports one such interrupt.
17164
17165 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
17166significance to the RX port when used with the 'interrupt' function
17167attribute.  This attribute indicates a function intended to process fast
17168interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
17169'r12' and/or 'r13' and only provided that the normal use of the
17170corresponding registers have been restricted via the '-ffixed-REG' or
17171'-mint-register' command-line options.
17172
17173
17174File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
17175
171763.17.36 S/390 and zSeries Options
17177---------------------------------
17178
17179These are the '-m' options defined for the S/390 and zSeries
17180architecture.
17181
17182'-mhard-float'
17183'-msoft-float'
17184     Use (do not use) the hardware floating-point instructions and
17185     registers for floating-point operations.  When '-msoft-float' is
17186     specified, functions in 'libgcc.a' are used to perform
17187     floating-point operations.  When '-mhard-float' is specified, the
17188     compiler generates IEEE floating-point instructions.  This is the
17189     default.
17190
17191'-mhard-dfp'
17192'-mno-hard-dfp'
17193     Use (do not use) the hardware decimal-floating-point instructions
17194     for decimal-floating-point operations.  When '-mno-hard-dfp' is
17195     specified, functions in 'libgcc.a' are used to perform
17196     decimal-floating-point operations.  When '-mhard-dfp' is specified,
17197     the compiler generates decimal-floating-point hardware
17198     instructions.  This is the default for '-march=z9-ec' or higher.
17199
17200'-mlong-double-64'
17201'-mlong-double-128'
17202     These switches control the size of 'long double' type.  A size of
17203     64 bits makes the 'long double' type equivalent to the 'double'
17204     type.  This is the default.
17205
17206'-mbackchain'
17207'-mno-backchain'
17208     Store (do not store) the address of the caller's frame as backchain
17209     pointer into the callee's stack frame.  A backchain may be needed
17210     to allow debugging using tools that do not understand DWARF 2 call
17211     frame information.  When '-mno-packed-stack' is in effect, the
17212     backchain pointer is stored at the bottom of the stack frame; when
17213     '-mpacked-stack' is in effect, the backchain is placed into the
17214     topmost word of the 96/160 byte register save area.
17215
17216     In general, code compiled with '-mbackchain' is call-compatible
17217     with code compiled with '-mmo-backchain'; however, use of the
17218     backchain for debugging purposes usually requires that the whole
17219     binary is built with '-mbackchain'.  Note that the combination of
17220     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
17221     supported.  In order to build a linux kernel use '-msoft-float'.
17222
17223     The default is to not maintain the backchain.
17224
17225'-mpacked-stack'
17226'-mno-packed-stack'
17227     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
17228     is specified, the compiler uses the all fields of the 96/160 byte
17229     register save area only for their default purpose; unused fields
17230     still take up stack space.  When '-mpacked-stack' is specified,
17231     register save slots are densely packed at the top of the register
17232     save area; unused space is reused for other purposes, allowing for
17233     more efficient use of the available stack space.  However, when
17234     '-mbackchain' is also in effect, the topmost word of the save area
17235     is always used to store the backchain, and the return address
17236     register is always saved two words below the backchain.
17237
17238     As long as the stack frame backchain is not used, code generated
17239     with '-mpacked-stack' is call-compatible with code generated with
17240     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
17241     for S/390 or zSeries generated code that uses the stack frame
17242     backchain at run time, not just for debugging purposes.  Such code
17243     is not call-compatible with code compiled with '-mpacked-stack'.
17244     Also, note that the combination of '-mbackchain', '-mpacked-stack'
17245     and '-mhard-float' is not supported.  In order to build a linux
17246     kernel use '-msoft-float'.
17247
17248     The default is to not use the packed stack layout.
17249
17250'-msmall-exec'
17251'-mno-small-exec'
17252     Generate (or do not generate) code using the 'bras' instruction to
17253     do subroutine calls.  This only works reliably if the total
17254     executable size does not exceed 64k.  The default is to use the
17255     'basr' instruction instead, which does not have this limitation.
17256
17257'-m64'
17258'-m31'
17259     When '-m31' is specified, generate code compliant to the GNU/Linux
17260     for S/390 ABI.  When '-m64' is specified, generate code compliant
17261     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
17262     generate 64-bit instructions.  For the 's390' targets, the default
17263     is '-m31', while the 's390x' targets default to '-m64'.
17264
17265'-mzarch'
17266'-mesa'
17267     When '-mzarch' is specified, generate code using the instructions
17268     available on z/Architecture.  When '-mesa' is specified, generate
17269     code using the instructions available on ESA/390.  Note that
17270     '-mesa' is not possible with '-m64'.  When generating code
17271     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
17272     When generating code compliant to the GNU/Linux for zSeries ABI,
17273     the default is '-mzarch'.
17274
17275'-mmvcle'
17276'-mno-mvcle'
17277     Generate (or do not generate) code using the 'mvcle' instruction to
17278     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
17279     loop instead.  This is the default unless optimizing for size.
17280
17281'-mdebug'
17282'-mno-debug'
17283     Print (or do not print) additional debug information when
17284     compiling.  The default is to not print debug information.
17285
17286'-march=CPU-TYPE'
17287     Generate code that runs on CPU-TYPE, which is the name of a system
17288     representing a certain processor type.  Possible values for
17289     CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and
17290     'z10'.  When generating code using the instructions available on
17291     z/Architecture, the default is '-march=z900'.  Otherwise, the
17292     default is '-march=g5'.
17293
17294'-mtune=CPU-TYPE'
17295     Tune to CPU-TYPE everything applicable about the generated code,
17296     except for the ABI and the set of available instructions.  The list
17297     of CPU-TYPE values is the same as for '-march'.  The default is the
17298     value used for '-march'.
17299
17300'-mtpf-trace'
17301'-mno-tpf-trace'
17302     Generate code that adds (does not add) in TPF OS specific branches
17303     to trace routines in the operating system.  This option is off by
17304     default, even when compiling for the TPF OS.
17305
17306'-mfused-madd'
17307'-mno-fused-madd'
17308     Generate code that uses (does not use) the floating-point multiply
17309     and accumulate instructions.  These instructions are generated by
17310     default if hardware floating point is used.
17311
17312'-mwarn-framesize=FRAMESIZE'
17313     Emit a warning if the current function exceeds the given frame
17314     size.  Because this is a compile-time check it doesn't need to be a
17315     real problem when the program runs.  It is intended to identify
17316     functions that most probably cause a stack overflow.  It is useful
17317     to be used in an environment with limited stack size e.g. the linux
17318     kernel.
17319
17320'-mwarn-dynamicstack'
17321     Emit a warning if the function calls 'alloca' or uses
17322     dynamically-sized arrays.  This is generally a bad idea with a
17323     limited stack size.
17324
17325'-mstack-guard=STACK-GUARD'
17326'-mstack-size=STACK-SIZE'
17327     If these options are provided the S/390 back end emits additional
17328     instructions in the function prologue that trigger a trap if the
17329     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
17330     the stack on S/390 grows downward).  If the STACK-GUARD option is
17331     omitted the smallest power of 2 larger than the frame size of the
17332     compiled function is chosen.  These options are intended to be used
17333     to help debugging stack overflow problems.  The additionally
17334     emitted code causes only little overhead and hence can also be used
17335     in production-like systems without greater performance degradation.
17336     The given values have to be exact powers of 2 and STACK-SIZE has to
17337     be greater than STACK-GUARD without exceeding 64k.  In order to be
17338     efficient the extra code makes the assumption that the stack starts
17339     at an address aligned to the value given by STACK-SIZE.  The
17340     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
17341
17342'-mhotpatch[=HALFWORDS]'
17343'-mno-hotpatch'
17344     If the hotpatch option is enabled, a "hot-patching" function
17345     prologue is generated for all functions in the compilation unit.
17346     The funtion label is prepended with the given number of two-byte
17347     Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
17348     instructions if no argument is present.  Functions with a
17349     hot-patching prologue are never inlined automatically, and a
17350     hot-patching prologue is never generated for functions functions
17351     that are explicitly inline.
17352
17353     This option can be overridden for individual functions with the
17354     'hotpatch' attribute.
17355
17356
17357File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
17358
173593.17.37 Score Options
17360---------------------
17361
17362These options are defined for Score implementations:
17363
17364'-meb'
17365     Compile code for big-endian mode.  This is the default.
17366
17367'-mel'
17368     Compile code for little-endian mode.
17369
17370'-mnhwloop'
17371     Disable generation of 'bcnz' instructions.
17372
17373'-muls'
17374     Enable generation of unaligned load and store instructions.
17375
17376'-mmac'
17377     Enable the use of multiply-accumulate instructions.  Disabled by
17378     default.
17379
17380'-mscore5'
17381     Specify the SCORE5 as the target architecture.
17382
17383'-mscore5u'
17384     Specify the SCORE5U of the target architecture.
17385
17386'-mscore7'
17387     Specify the SCORE7 as the target architecture.  This is the
17388     default.
17389
17390'-mscore7d'
17391     Specify the SCORE7D as the target architecture.
17392
17393
17394File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
17395
173963.17.38 SH Options
17397------------------
17398
17399These '-m' options are defined for the SH implementations:
17400
17401'-m1'
17402     Generate code for the SH1.
17403
17404'-m2'
17405     Generate code for the SH2.
17406
17407'-m2e'
17408     Generate code for the SH2e.
17409
17410'-m2a-nofpu'
17411     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
17412     way that the floating-point unit is not used.
17413
17414'-m2a-single-only'
17415     Generate code for the SH2a-FPU, in such a way that no
17416     double-precision floating-point operations are used.
17417
17418'-m2a-single'
17419     Generate code for the SH2a-FPU assuming the floating-point unit is
17420     in single-precision mode by default.
17421
17422'-m2a'
17423     Generate code for the SH2a-FPU assuming the floating-point unit is
17424     in double-precision mode by default.
17425
17426'-m3'
17427     Generate code for the SH3.
17428
17429'-m3e'
17430     Generate code for the SH3e.
17431
17432'-m4-nofpu'
17433     Generate code for the SH4 without a floating-point unit.
17434
17435'-m4-single-only'
17436     Generate code for the SH4 with a floating-point unit that only
17437     supports single-precision arithmetic.
17438
17439'-m4-single'
17440     Generate code for the SH4 assuming the floating-point unit is in
17441     single-precision mode by default.
17442
17443'-m4'
17444     Generate code for the SH4.
17445
17446'-m4a-nofpu'
17447     Generate code for the SH4al-dsp, or for a SH4a in such a way that
17448     the floating-point unit is not used.
17449
17450'-m4a-single-only'
17451     Generate code for the SH4a, in such a way that no double-precision
17452     floating-point operations are used.
17453
17454'-m4a-single'
17455     Generate code for the SH4a assuming the floating-point unit is in
17456     single-precision mode by default.
17457
17458'-m4a'
17459     Generate code for the SH4a.
17460
17461'-m4al'
17462     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
17463     the assembler.  GCC doesn't generate any DSP instructions at the
17464     moment.
17465
17466'-mb'
17467     Compile code for the processor in big-endian mode.
17468
17469'-ml'
17470     Compile code for the processor in little-endian mode.
17471
17472'-mdalign'
17473     Align doubles at 64-bit boundaries.  Note that this changes the
17474     calling conventions, and thus some functions from the standard C
17475     library do not work unless you recompile it first with '-mdalign'.
17476
17477'-mrelax'
17478     Shorten some address references at link time, when possible; uses
17479     the linker option '-relax'.
17480
17481'-mbigtable'
17482     Use 32-bit offsets in 'switch' tables.  The default is to use
17483     16-bit offsets.
17484
17485'-mbitops'
17486     Enable the use of bit manipulation instructions on SH2A.
17487
17488'-mfmovd'
17489     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
17490     alignment constraints.
17491
17492'-mhitachi'
17493     Comply with the calling conventions defined by Renesas.
17494
17495'-mrenesas'
17496     Comply with the calling conventions defined by Renesas.
17497
17498'-mno-renesas'
17499     Comply with the calling conventions defined for GCC before the
17500     Renesas conventions were available.  This option is the default for
17501     all targets of the SH toolchain.
17502
17503'-mnomacsave'
17504     Mark the 'MAC' register as call-clobbered, even if '-mhitachi' is
17505     given.
17506
17507'-mieee'
17508'-mno-ieee'
17509     Control the IEEE compliance of floating-point comparisons, which
17510     affects the handling of cases where the result of a comparison is
17511     unordered.  By default '-mieee' is implicitly enabled.  If
17512     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
17513     which results in faster floating-point greater-equal and less-equal
17514     comparisons.  The implcit settings can be overridden by specifying
17515     either '-mieee' or '-mno-ieee'.
17516
17517'-minline-ic_invalidate'
17518     Inline code to invalidate instruction cache entries after setting
17519     up nested function trampolines.  This option has no effect if
17520     '-musermode' is in effect and the selected code generation option
17521     (e.g.  '-m4') does not allow the use of the 'icbi' instruction.  If
17522     the selected code generation option does not allow the use of the
17523     'icbi' instruction, and '-musermode' is not in effect, the inlined
17524     code manipulates the instruction cache address array directly with
17525     an associative write.  This not only requires privileged mode at
17526     run time, but it also fails if the cache line had been mapped via
17527     the TLB and has become unmapped.
17528
17529'-misize'
17530     Dump instruction size and location in the assembly code.
17531
17532'-mpadstruct'
17533     This option is deprecated.  It pads structures to multiple of 4
17534     bytes, which is incompatible with the SH ABI.
17535
17536'-matomic-model=MODEL'
17537     Sets the model of atomic operations and additional parameters as a
17538     comma separated list.  For details on the atomic built-in functions
17539     see *note __atomic Builtins::.  The following models and parameters
17540     are supported:
17541
17542     'none'
17543          Disable compiler generated atomic sequences and emit library
17544          calls for atomic operations.  This is the default if the
17545          target is not 'sh-*-linux*'.
17546
17547     'soft-gusa'
17548          Generate GNU/Linux compatible gUSA software atomic sequences
17549          for the atomic built-in functions.  The generated atomic
17550          sequences require additional support from the
17551          interrupt/exception handling code of the system and are only
17552          suitable for SH3* and SH4* single-core systems.  This option
17553          is enabled by default when the target is 'sh-*-linux*' and
17554          SH3* or SH4*.  When the target is SH4A, this option will also
17555          partially utilize the hardware atomic instructions 'movli.l'
17556          and 'movco.l' to create more efficient code, unless 'strict'
17557          is specified.
17558
17559     'soft-tcb'
17560          Generate software atomic sequences that use a variable in the
17561          thread control block.  This is a variation of the gUSA
17562          sequences which can also be used on SH1* and SH2* targets.
17563          The generated atomic sequences require additional support from
17564          the interrupt/exception handling code of the system and are
17565          only suitable for single-core systems.  When using this model,
17566          the 'gbr-offset=' parameter has to be specified as well.
17567
17568     'soft-imask'
17569          Generate software atomic sequences that temporarily disable
17570          interrupts by setting 'SR.IMASK = 1111'.  This model works
17571          only when the program runs in privileged mode and is only
17572          suitable for single-core systems.  Additional support from the
17573          interrupt/exception handling code of the system is not
17574          required.  This model is enabled by default when the target is
17575          'sh-*-linux*' and SH1* or SH2*.
17576
17577     'hard-llcs'
17578          Generate hardware atomic sequences using the 'movli.l' and
17579          'movco.l' instructions only.  This is only available on SH4A
17580          and is suitable for multi-core systems.  Since the hardware
17581          instructions support only 32 bit atomic variables access to 8
17582          or 16 bit variables is emulated with 32 bit accesses.  Code
17583          compiled with this option will also be compatible with other
17584          software atomic model interrupt/exception handling systems if
17585          executed on an SH4A system.  Additional support from the
17586          interrupt/exception handling code of the system is not
17587          required for this model.
17588
17589     'gbr-offset='
17590          This parameter specifies the offset in bytes of the variable
17591          in the thread control block structure that should be used by
17592          the generated atomic sequences when the 'soft-tcb' model has
17593          been selected.  For other models this parameter is ignored.
17594          The specified value must be an integer multiple of four and in
17595          the range 0-1020.
17596
17597     'strict'
17598          This parameter prevents mixed usage of multiple atomic models,
17599          even though they would be compatible, and will make the
17600          compiler generate atomic sequences of the specified model
17601          only.
17602
17603'-mtas'
17604     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
17605     that depending on the particular hardware and software
17606     configuration this can degrade overall performance due to the
17607     operand cache line flushes that are implied by the 'tas.b'
17608     instruction.  On multi-core SH4A processors the 'tas.b' instruction
17609     must be used with caution since it can result in data corruption
17610     for certain cache configurations.
17611
17612'-mspace'
17613     Optimize for space instead of speed.  Implied by '-Os'.
17614
17615'-mprefergot'
17616     When generating position-independent code, emit function calls
17617     using the Global Offset Table instead of the Procedure Linkage
17618     Table.
17619
17620'-musermode'
17621     Don't generate privileged mode only code.  This option implies
17622     '-mno-inline-ic_invalidate' if the inlined code would not work in
17623     user mode.  This is the default when the target is 'sh-*-linux*'.
17624
17625'-multcost=NUMBER'
17626     Set the cost to assume for a multiply insn.
17627
17628'-mdiv=STRATEGY'
17629     Set the division strategy to be used for integer division
17630     operations.  For SHmedia STRATEGY can be one of:
17631
17632     'fp'
17633          Performs the operation in floating point.  This has a very
17634          high latency, but needs only a few instructions, so it might
17635          be a good choice if your code has enough easily-exploitable
17636          ILP to allow the compiler to schedule the floating-point
17637          instructions together with other instructions.  Division by
17638          zero causes a floating-point exception.
17639
17640     'inv'
17641          Uses integer operations to calculate the inverse of the
17642          divisor, and then multiplies the dividend with the inverse.
17643          This strategy allows CSE and hoisting of the inverse
17644          calculation.  Division by zero calculates an unspecified
17645          result, but does not trap.
17646
17647     'inv:minlat'
17648          A variant of 'inv' where, if no CSE or hoisting opportunities
17649          have been found, or if the entire operation has been hoisted
17650          to the same place, the last stages of the inverse calculation
17651          are intertwined with the final multiply to reduce the overall
17652          latency, at the expense of using a few more instructions, and
17653          thus offering fewer scheduling opportunities with other code.
17654
17655     'call'
17656          Calls a library function that usually implements the
17657          'inv:minlat' strategy.  This gives high code density for
17658          'm5-*media-nofpu' compilations.
17659
17660     'call2'
17661          Uses a different entry point of the same library function,
17662          where it assumes that a pointer to a lookup table has already
17663          been set up, which exposes the pointer load to CSE and code
17664          hoisting optimizations.
17665
17666     'inv:call'
17667     'inv:call2'
17668     'inv:fp'
17669          Use the 'inv' algorithm for initial code generation, but if
17670          the code stays unoptimized, revert to the 'call', 'call2', or
17671          'fp' strategies, respectively.  Note that the
17672          potentially-trapping side effect of division by zero is
17673          carried by a separate instruction, so it is possible that all
17674          the integer instructions are hoisted out, but the marker for
17675          the side effect stays where it is.  A recombination to
17676          floating-point operations or a call is not possible in that
17677          case.
17678
17679     'inv20u'
17680     'inv20l'
17681          Variants of the 'inv:minlat' strategy.  In the case that the
17682          inverse calculation is not separated from the multiply, they
17683          speed up division where the dividend fits into 20 bits (plus
17684          sign where applicable) by inserting a test to skip a number of
17685          operations in this case; this test slows down the case of
17686          larger dividends.  'inv20u' assumes the case of a such a small
17687          dividend to be unlikely, and 'inv20l' assumes it to be likely.
17688
17689     For targets other than SHmedia STRATEGY can be one of:
17690
17691     'call-div1'
17692          Calls a library function that uses the single-step division
17693          instruction 'div1' to perform the operation.  Division by zero
17694          calculates an unspecified result and does not trap.  This is
17695          the default except for SH4, SH2A and SHcompact.
17696
17697     'call-fp'
17698          Calls a library function that performs the operation in double
17699          precision floating point.  Division by zero causes a
17700          floating-point exception.  This is the default for SHcompact
17701          with FPU. Specifying this for targets that do not have a
17702          double precision FPU will default to 'call-div1'.
17703
17704     'call-table'
17705          Calls a library function that uses a lookup table for small
17706          divisors and the 'div1' instruction with case distinction for
17707          larger divisors.  Division by zero calculates an unspecified
17708          result and does not trap.  This is the default for SH4.
17709          Specifying this for targets that do not have dynamic shift
17710          instructions will default to 'call-div1'.
17711
17712     When a division strategy has not been specified the default
17713     strategy will be selected based on the current target.  For SH2A
17714     the default strategy is to use the 'divs' and 'divu' instructions
17715     instead of library function calls.
17716
17717'-maccumulate-outgoing-args'
17718     Reserve space once for outgoing arguments in the function prologue
17719     rather than around each call.  Generally beneficial for performance
17720     and size.  Also needed for unwinding to avoid changing the stack
17721     frame around conditional code.
17722
17723'-mdivsi3_libfunc=NAME'
17724     Set the name of the library function used for 32-bit signed
17725     division to NAME.  This only affects the name used in the 'call'
17726     and 'inv:call' division strategies, and the compiler still expects
17727     the same sets of input/output/clobbered registers as if this option
17728     were not present.
17729
17730'-mfixed-range=REGISTER-RANGE'
17731     Generate code treating the given register range as fixed registers.
17732     A fixed register is one that the register allocator can not use.
17733     This is useful when compiling kernel code.  A register range is
17734     specified as two registers separated by a dash.  Multiple register
17735     ranges can be specified separated by a comma.
17736
17737'-mindexed-addressing'
17738     Enable the use of the indexed addressing mode for
17739     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
17740     implement 32-bit wrap-around semantics for the indexed addressing
17741     mode.  The architecture allows the implementation of processors
17742     with 64-bit MMU, which the OS could use to get 32-bit addressing,
17743     but since no current hardware implementation supports this or any
17744     other way to make the indexed addressing mode safe to use in the
17745     32-bit ABI, the default is '-mno-indexed-addressing'.
17746
17747'-mgettrcost=NUMBER'
17748     Set the cost assumed for the 'gettr' instruction to NUMBER.  The
17749     default is 2 if '-mpt-fixed' is in effect, 100 otherwise.
17750
17751'-mpt-fixed'
17752     Assume 'pt*' instructions won't trap.  This generally generates
17753     better-scheduled code, but is unsafe on current hardware.  The
17754     current architecture definition says that 'ptabs' and 'ptrel' trap
17755     when the target anded with 3 is 3.  This has the unintentional
17756     effect of making it unsafe to schedule these instructions before a
17757     branch, or hoist them out of a loop.  For example,
17758     '__do_global_ctors', a part of 'libgcc' that runs constructors at
17759     program startup, calls functions in a list which is delimited by
17760     -1.  With the '-mpt-fixed' option, the 'ptabs' is done before
17761     testing against -1.  That means that all the constructors run a bit
17762     more quickly, but when the loop comes to the end of the list, the
17763     program crashes because 'ptabs' loads -1 into a target register.
17764
17765     Since this option is unsafe for any hardware implementing the
17766     current architecture specification, the default is '-mno-pt-fixed'.
17767     Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed'
17768     also implies '-mgettrcost=100'; this deters register allocation
17769     from using target registers for storing ordinary integers.
17770
17771'-minvalid-symbols'
17772     Assume symbols might be invalid.  Ordinary function symbols
17773     generated by the compiler are always valid to load with
17774     'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with
17775     assembler and/or linker tricks it is possible to generate symbols
17776     that cause 'ptabs' or 'ptrel' to trap.  This option is only
17777     meaningful when '-mno-pt-fixed' is in effect.  It prevents
17778     cross-basic-block CSE, hoisting and most scheduling of symbol
17779     loads.  The default is '-mno-invalid-symbols'.
17780
17781'-mbranch-cost=NUM'
17782     Assume NUM to be the cost for a branch instruction.  Higher numbers
17783     make the compiler try to generate more branch-free code if
17784     possible.  If not specified the value is selected depending on the
17785     processor type that is being compiled for.
17786
17787'-mzdcbranch'
17788'-mno-zdcbranch'
17789     Assume (do not assume) that zero displacement conditional branch
17790     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
17791     specified, the compiler will try to prefer zero displacement branch
17792     code sequences.  This is enabled by default when generating code
17793     for SH4 and SH4A. It can be explicitly disabled by specifying
17794     '-mno-zdcbranch'.
17795
17796'-mcbranchdi'
17797     Enable the 'cbranchdi4' instruction pattern.
17798
17799'-mcmpeqdi'
17800     Emit the 'cmpeqdi_t' instruction pattern even when '-mcbranchdi' is
17801     in effect.
17802
17803'-mfused-madd'
17804'-mno-fused-madd'
17805     Generate code that uses (does not use) the floating-point multiply
17806     and accumulate instructions.  These instructions are generated by
17807     default if hardware floating point is used.  The machine-dependent
17808     '-mfused-madd' option is now mapped to the machine-independent
17809     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
17810     '-ffp-contract=off'.
17811
17812'-mfsca'
17813'-mno-fsca'
17814     Allow or disallow the compiler to emit the 'fsca' instruction for
17815     sine and cosine approximations.  The option '-mfsca' must be used
17816     in combination with '-funsafe-math-optimizations'.  It is enabled
17817     by default when generating code for SH4A. Using '-mno-fsca'
17818     disables sine and cosine approximations even if
17819     '-funsafe-math-optimizations' is in effect.
17820
17821'-mfsrra'
17822'-mno-fsrra'
17823     Allow or disallow the compiler to emit the 'fsrra' instruction for
17824     reciprocal square root approximations.  The option '-mfsrra' must
17825     be used in combination with '-funsafe-math-optimizations' and
17826     '-ffinite-math-only'.  It is enabled by default when generating
17827     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
17828     approximations even if '-funsafe-math-optimizations' and
17829     '-ffinite-math-only' are in effect.
17830
17831'-mpretend-cmove'
17832     Prefer zero-displacement conditional branches for conditional move
17833     instruction patterns.  This can result in faster code on the SH4
17834     processor.
17835
17836
17837File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
17838
178393.17.39 Solaris 2 Options
17840-------------------------
17841
17842These '-m' options are supported on Solaris 2:
17843
17844'-mimpure-text'
17845     '-mimpure-text', used in addition to '-shared', tells the compiler
17846     to not pass '-z text' to the linker when linking a shared object.
17847     Using this option, you can link position-dependent code into a
17848     shared object.
17849
17850     '-mimpure-text' suppresses the "relocations remain against
17851     allocatable but non-writable sections" linker error message.
17852     However, the necessary relocations trigger copy-on-write, and the
17853     shared object is not actually shared across processes.  Instead of
17854     using '-mimpure-text', you should compile all source code with
17855     '-fpic' or '-fPIC'.
17856
17857 These switches are supported in addition to the above on Solaris 2:
17858
17859'-pthreads'
17860     Add support for multithreading using the POSIX threads library.
17861     This option sets flags for both the preprocessor and linker.  This
17862     option does not affect the thread safety of object code produced by
17863     the compiler or that of libraries supplied with it.
17864
17865'-pthread'
17866     This is a synonym for '-pthreads'.
17867
17868
17869File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
17870
178713.17.40 SPARC Options
17872---------------------
17873
17874These '-m' options are supported on the SPARC:
17875
17876'-mno-app-regs'
17877'-mapp-regs'
17878     Specify '-mapp-regs' to generate output using the global registers
17879     2 through 4, which the SPARC SVR4 ABI reserves for applications.
17880     Like the global register 1, each global register 2 through 4 is
17881     then treated as an allocable register that is clobbered by function
17882     calls.  This is the default.
17883
17884     To be fully SVR4 ABI-compliant at the cost of some performance
17885     loss, specify '-mno-app-regs'.  You should compile libraries and
17886     system software with this option.
17887
17888'-mflat'
17889'-mno-flat'
17890     With '-mflat', the compiler does not generate save/restore
17891     instructions and uses a "flat" or single register window model.
17892     This model is compatible with the regular register window model.
17893     The local registers and the input registers (0-5) are still treated
17894     as "call-saved" registers and are saved on the stack as needed.
17895
17896     With '-mno-flat' (the default), the compiler generates save/restore
17897     instructions (except for leaf functions).  This is the normal
17898     operating mode.
17899
17900'-mfpu'
17901'-mhard-float'
17902     Generate output containing floating-point instructions.  This is
17903     the default.
17904
17905'-mno-fpu'
17906'-msoft-float'
17907     Generate output containing library calls for floating point.
17908     *Warning:* the requisite libraries are not available for all SPARC
17909     targets.  Normally the facilities of the machine's usual C compiler
17910     are used, but this cannot be done directly in cross-compilation.
17911     You must make your own arrangements to provide suitable library
17912     functions for cross-compilation.  The embedded targets
17913     'sparc-*-aout' and 'sparclite-*-*' do provide software
17914     floating-point support.
17915
17916     '-msoft-float' changes the calling convention in the output file;
17917     therefore, it is only useful if you compile _all_ of a program with
17918     this option.  In particular, you need to compile 'libgcc.a', the
17919     library that comes with GCC, with '-msoft-float' in order for this
17920     to work.
17921
17922'-mhard-quad-float'
17923     Generate output containing quad-word (long double) floating-point
17924     instructions.
17925
17926'-msoft-quad-float'
17927     Generate output containing library calls for quad-word (long
17928     double) floating-point instructions.  The functions called are
17929     those specified in the SPARC ABI.  This is the default.
17930
17931     As of this writing, there are no SPARC implementations that have
17932     hardware support for the quad-word floating-point instructions.
17933     They all invoke a trap handler for one of these instructions, and
17934     then the trap handler emulates the effect of the instruction.
17935     Because of the trap handler overhead, this is much slower than
17936     calling the ABI library routines.  Thus the '-msoft-quad-float'
17937     option is the default.
17938
17939'-mno-unaligned-doubles'
17940'-munaligned-doubles'
17941     Assume that doubles have 8-byte alignment.  This is the default.
17942
17943     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
17944     alignment only if they are contained in another type, or if they
17945     have an absolute address.  Otherwise, it assumes they have 4-byte
17946     alignment.  Specifying this option avoids some rare compatibility
17947     problems with code generated by other compilers.  It is not the
17948     default because it results in a performance loss, especially for
17949     floating-point code.
17950
17951'-muser-mode'
17952'-mno-user-mode'
17953     Do not generate code that can only run in supervisor mode.  This is
17954     relevant only for the 'casa' instruction emitted for the LEON3
17955     processor.  The default is '-mno-user-mode'.
17956
17957'-mno-faster-structs'
17958'-mfaster-structs'
17959     With '-mfaster-structs', the compiler assumes that structures
17960     should have 8-byte alignment.  This enables the use of pairs of
17961     'ldd' and 'std' instructions for copies in structure assignment, in
17962     place of twice as many 'ld' and 'st' pairs.  However, the use of
17963     this changed alignment directly violates the SPARC ABI.  Thus, it's
17964     intended only for use on targets where the developer acknowledges
17965     that their resulting code is not directly in line with the rules of
17966     the ABI.
17967
17968'-mcpu=CPU_TYPE'
17969     Set the instruction set, register set, and instruction scheduling
17970     parameters for machine type CPU_TYPE.  Supported values for
17971     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
17972     'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x',
17973     'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara',
17974     'niagara2', 'niagara3' and 'niagara4'.
17975
17976     Native Solaris and GNU/Linux toolchains also support the value
17977     'native', which selects the best architecture option for the host
17978     processor.  '-mcpu=native' has no effect if GCC does not recognize
17979     the processor.
17980
17981     Default instruction scheduling parameters are used for values that
17982     select an architecture and not an implementation.  These are 'v7',
17983     'v8', 'sparclite', 'sparclet', 'v9'.
17984
17985     Here is a list of each supported architecture and their supported
17986     implementations.
17987
17988     v7
17989          cypress
17990
17991     v8
17992          supersparc, hypersparc, leon, leon3
17993
17994     sparclite
17995          f930, f934, sparclite86x
17996
17997     sparclet
17998          tsc701
17999
18000     v9
18001          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
18002
18003     By default (unless configured otherwise), GCC generates code for
18004     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
18005     the compiler additionally optimizes it for the Cypress CY7C602
18006     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
18007     also appropriate for the older SPARCStation 1, 2, IPX etc.
18008
18009     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
18010     architecture.  The only difference from V7 code is that the
18011     compiler emits the integer multiply and integer divide instructions
18012     which exist in SPARC-V8 but not in SPARC-V7.  With
18013     '-mcpu=supersparc', the compiler additionally optimizes it for the
18014     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
18015     series.
18016
18017     With '-mcpu=sparclite', GCC generates code for the SPARClite
18018     variant of the SPARC architecture.  This adds the integer multiply,
18019     integer divide step and scan ('ffs') instructions which exist in
18020     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
18021     additionally optimizes it for the Fujitsu MB86930 chip, which is
18022     the original SPARClite, with no FPU.  With '-mcpu=f934', the
18023     compiler additionally optimizes it for the Fujitsu MB86934 chip,
18024     which is the more recent SPARClite with FPU.
18025
18026     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
18027     of the SPARC architecture.  This adds the integer multiply,
18028     multiply/accumulate, integer divide step and scan ('ffs')
18029     instructions which exist in SPARClet but not in SPARC-V7.  With
18030     '-mcpu=tsc701', the compiler additionally optimizes it for the
18031     TEMIC SPARClet chip.
18032
18033     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
18034     architecture.  This adds 64-bit integer and floating-point move
18035     instructions, 3 additional floating-point condition code registers
18036     and conditional move instructions.  With '-mcpu=ultrasparc', the
18037     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
18038     chips.  With '-mcpu=ultrasparc3', the compiler additionally
18039     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
18040     chips.  With '-mcpu=niagara', the compiler additionally optimizes
18041     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
18042     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
18043     With '-mcpu=niagara3', the compiler additionally optimizes it for
18044     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
18045     additionally optimizes it for Sun UltraSPARC T4 chips.
18046
18047'-mtune=CPU_TYPE'
18048     Set the instruction scheduling parameters for machine type
18049     CPU_TYPE, but do not set the instruction set or register set that
18050     the option '-mcpu=CPU_TYPE' does.
18051
18052     The same values for '-mcpu=CPU_TYPE' can be used for
18053     '-mtune=CPU_TYPE', but the only useful values are those that select
18054     a particular CPU implementation.  Those are 'cypress',
18055     'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934',
18056     'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara',
18057     'niagara2', 'niagara3' and 'niagara4'.  With native Solaris and
18058     GNU/Linux toolchains, 'native' can also be used.
18059
18060'-mv8plus'
18061'-mno-v8plus'
18062     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
18063     difference from the V8 ABI is that the global and out registers are
18064     considered 64 bits wide.  This is enabled by default on Solaris in
18065     32-bit mode for all SPARC-V9 processors.
18066
18067'-mvis'
18068'-mno-vis'
18069     With '-mvis', GCC generates code that takes advantage of the
18070     UltraSPARC Visual Instruction Set extensions.  The default is
18071     '-mno-vis'.
18072
18073'-mvis2'
18074'-mno-vis2'
18075     With '-mvis2', GCC generates code that takes advantage of version
18076     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
18077     default is '-mvis2' when targeting a cpu that supports such
18078     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
18079     also sets '-mvis'.
18080
18081'-mvis3'
18082'-mno-vis3'
18083     With '-mvis3', GCC generates code that takes advantage of version
18084     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
18085     default is '-mvis3' when targeting a cpu that supports such
18086     instructions, such as niagara-3 and later.  Setting '-mvis3' also
18087     sets '-mvis2' and '-mvis'.
18088
18089'-mcbcond'
18090'-mno-cbcond'
18091     With '-mcbcond', GCC generates code that takes advantage of
18092     compare-and-branch instructions, as defined in the Sparc
18093     Architecture 2011.  The default is '-mcbcond' when targeting a cpu
18094     that supports such instructions, such as niagara-4 and later.
18095
18096'-mpopc'
18097'-mno-popc'
18098     With '-mpopc', GCC generates code that takes advantage of the
18099     UltraSPARC population count instruction.  The default is '-mpopc'
18100     when targeting a cpu that supports such instructions, such as
18101     Niagara-2 and later.
18102
18103'-mfmaf'
18104'-mno-fmaf'
18105     With '-mfmaf', GCC generates code that takes advantage of the
18106     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
18107     default is '-mfmaf' when targeting a cpu that supports such
18108     instructions, such as Niagara-3 and later.
18109
18110'-mfix-at697f'
18111     Enable the documented workaround for the single erratum of the
18112     Atmel AT697F processor (which corresponds to erratum #13 of the
18113     AT697E processor).
18114
18115'-mfix-ut699'
18116     Enable the documented workarounds for the floating-point errata and
18117     the data cache nullify errata of the UT699 processor.
18118
18119 These '-m' options are supported in addition to the above on SPARC-V9
18120processors in 64-bit environments:
18121
18122'-m32'
18123'-m64'
18124     Generate code for a 32-bit or 64-bit environment.  The 32-bit
18125     environment sets int, long and pointer to 32 bits.  The 64-bit
18126     environment sets int to 32 bits and long and pointer to 64 bits.
18127
18128'-mcmodel=WHICH'
18129     Set the code model to one of
18130
18131     'medlow'
18132          The Medium/Low code model: 64-bit addresses, programs must be
18133          linked in the low 32 bits of memory.  Programs can be
18134          statically or dynamically linked.
18135
18136     'medmid'
18137          The Medium/Middle code model: 64-bit addresses, programs must
18138          be linked in the low 44 bits of memory, the text and data
18139          segments must be less than 2GB in size and the data segment
18140          must be located within 2GB of the text segment.
18141
18142     'medany'
18143          The Medium/Anywhere code model: 64-bit addresses, programs may
18144          be linked anywhere in memory, the text and data segments must
18145          be less than 2GB in size and the data segment must be located
18146          within 2GB of the text segment.
18147
18148     'embmedany'
18149          The Medium/Anywhere code model for embedded systems: 64-bit
18150          addresses, the text and data segments must be less than 2GB in
18151          size, both starting anywhere in memory (determined at link
18152          time).  The global register %g4 points to the base of the data
18153          segment.  Programs are statically linked and PIC is not
18154          supported.
18155
18156'-mmemory-model=MEM-MODEL'
18157     Set the memory model in force on the processor to one of
18158
18159     'default'
18160          The default memory model for the processor and operating
18161          system.
18162
18163     'rmo'
18164          Relaxed Memory Order
18165
18166     'pso'
18167          Partial Store Order
18168
18169     'tso'
18170          Total Store Order
18171
18172     'sc'
18173          Sequential Consistency
18174
18175     These memory models are formally defined in Appendix D of the Sparc
18176     V9 architecture manual, as set in the processor's 'PSTATE.MM'
18177     field.
18178
18179'-mstack-bias'
18180'-mno-stack-bias'
18181     With '-mstack-bias', GCC assumes that the stack pointer, and frame
18182     pointer if present, are offset by -2047 which must be added back
18183     when making stack frame references.  This is the default in 64-bit
18184     mode.  Otherwise, assume no such offset is present.
18185
18186
18187File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
18188
181893.17.41 SPU Options
18190-------------------
18191
18192These '-m' options are supported on the SPU:
18193
18194'-mwarn-reloc'
18195'-merror-reloc'
18196
18197     The loader for SPU does not handle dynamic relocations.  By
18198     default, GCC gives an error when it generates code that requires a
18199     dynamic relocation.  '-mno-error-reloc' disables the error,
18200     '-mwarn-reloc' generates a warning instead.
18201
18202'-msafe-dma'
18203'-munsafe-dma'
18204
18205     Instructions that initiate or test completion of DMA must not be
18206     reordered with respect to loads and stores of the memory that is
18207     being accessed.  With '-munsafe-dma' you must use the 'volatile'
18208     keyword to protect memory accesses, but that can lead to
18209     inefficient code in places where the memory is known to not change.
18210     Rather than mark the memory as volatile, you can use '-msafe-dma'
18211     to tell the compiler to treat the DMA instructions as potentially
18212     affecting all memory.
18213
18214'-mbranch-hints'
18215
18216     By default, GCC generates a branch hint instruction to avoid
18217     pipeline stalls for always-taken or probably-taken branches.  A
18218     hint is not generated closer than 8 instructions away from its
18219     branch.  There is little reason to disable them, except for
18220     debugging purposes, or to make an object a little bit smaller.
18221
18222'-msmall-mem'
18223'-mlarge-mem'
18224
18225     By default, GCC generates code assuming that addresses are never
18226     larger than 18 bits.  With '-mlarge-mem' code is generated that
18227     assumes a full 32-bit address.
18228
18229'-mstdmain'
18230
18231     By default, GCC links against startup code that assumes the
18232     SPU-style main function interface (which has an unconventional
18233     parameter list).  With '-mstdmain', GCC links your program against
18234     startup code that assumes a C99-style interface to 'main',
18235     including a local copy of 'argv' strings.
18236
18237'-mfixed-range=REGISTER-RANGE'
18238     Generate code treating the given register range as fixed registers.
18239     A fixed register is one that the register allocator cannot use.
18240     This is useful when compiling kernel code.  A register range is
18241     specified as two registers separated by a dash.  Multiple register
18242     ranges can be specified separated by a comma.
18243
18244'-mea32'
18245'-mea64'
18246     Compile code assuming that pointers to the PPU address space
18247     accessed via the '__ea' named address space qualifier are either 32
18248     or 64 bits wide.  The default is 32 bits.  As this is an
18249     ABI-changing option, all object code in an executable must be
18250     compiled with the same setting.
18251
18252'-maddress-space-conversion'
18253'-mno-address-space-conversion'
18254     Allow/disallow treating the '__ea' address space as superset of the
18255     generic address space.  This enables explicit type casts between
18256     '__ea' and generic pointer as well as implicit conversions of
18257     generic pointers to '__ea' pointers.  The default is to allow
18258     address space pointer conversions.
18259
18260'-mcache-size=CACHE-SIZE'
18261     This option controls the version of libgcc that the compiler links
18262     to an executable and selects a software-managed cache for accessing
18263     variables in the '__ea' address space with a particular cache size.
18264     Possible options for CACHE-SIZE are '8', '16', '32', '64' and
18265     '128'.  The default cache size is 64KB.
18266
18267'-matomic-updates'
18268'-mno-atomic-updates'
18269     This option controls the version of libgcc that the compiler links
18270     to an executable and selects whether atomic updates to the
18271     software-managed cache of PPU-side variables are used.  If you use
18272     atomic updates, changes to a PPU variable from SPU code using the
18273     '__ea' named address space qualifier do not interfere with changes
18274     to other PPU variables residing in the same cache line from PPU
18275     code.  If you do not use atomic updates, such interference may
18276     occur; however, writing back cache lines is more efficient.  The
18277     default behavior is to use atomic updates.
18278
18279'-mdual-nops'
18280'-mdual-nops=N'
18281     By default, GCC inserts nops to increase dual issue when it expects
18282     it to increase performance.  N can be a value from 0 to 10.  A
18283     smaller N inserts fewer nops.  10 is the default, 0 is the same as
18284     '-mno-dual-nops'.  Disabled with '-Os'.
18285
18286'-mhint-max-nops=N'
18287     Maximum number of nops to insert for a branch hint.  A branch hint
18288     must be at least 8 instructions away from the branch it is
18289     affecting.  GCC inserts up to N nops to enforce this, otherwise it
18290     does not generate the branch hint.
18291
18292'-mhint-max-distance=N'
18293     The encoding of the branch hint instruction limits the hint to be
18294     within 256 instructions of the branch it is affecting.  By default,
18295     GCC makes sure it is within 125.
18296
18297'-msafe-hints'
18298     Work around a hardware bug that causes the SPU to stall
18299     indefinitely.  By default, GCC inserts the 'hbrp' instruction to
18300     make sure this stall won't happen.
18301
18302
18303File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
18304
183053.17.42 Options for System V
18306----------------------------
18307
18308These additional options are available on System V Release 4 for
18309compatibility with other compilers on those systems:
18310
18311'-G'
18312     Create a shared object.  It is recommended that '-symbolic' or
18313     '-shared' be used instead.
18314
18315'-Qy'
18316     Identify the versions of each tool used by the compiler, in a
18317     '.ident' assembler directive in the output.
18318
18319'-Qn'
18320     Refrain from adding '.ident' directives to the output file (this is
18321     the default).
18322
18323'-YP,DIRS'
18324     Search the directories DIRS, and no others, for libraries specified
18325     with '-l'.
18326
18327'-Ym,DIR'
18328     Look in the directory DIR to find the M4 preprocessor.  The
18329     assembler uses this option.
18330
18331
18332File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
18333
183343.17.43 TILE-Gx Options
18335-----------------------
18336
18337These '-m' options are supported on the TILE-Gx:
18338
18339'-mcmodel=small'
18340     Generate code for the small model.  The distance for direct calls
18341     is limited to 500M in either direction.  PC-relative addresses are
18342     32 bits.  Absolute addresses support the full address range.
18343
18344'-mcmodel=large'
18345     Generate code for the large model.  There is no limitation on call
18346     distance, pc-relative addresses, or absolute addresses.
18347
18348'-mcpu=NAME'
18349     Selects the type of CPU to be targeted.  Currently the only
18350     supported type is 'tilegx'.
18351
18352'-m32'
18353'-m64'
18354     Generate code for a 32-bit or 64-bit environment.  The 32-bit
18355     environment sets int, long, and pointer to 32 bits.  The 64-bit
18356     environment sets int to 32 bits and long and pointer to 64 bits.
18357
18358
18359File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
18360
183613.17.44 TILEPro Options
18362-----------------------
18363
18364These '-m' options are supported on the TILEPro:
18365
18366'-mcpu=NAME'
18367     Selects the type of CPU to be targeted.  Currently the only
18368     supported type is 'tilepro'.
18369
18370'-m32'
18371     Generate code for a 32-bit environment, which sets int, long, and
18372     pointer to 32 bits.  This is the only supported behavior so the
18373     flag is essentially ignored.
18374
18375
18376File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
18377
183783.17.45 V850 Options
18379--------------------
18380
18381These '-m' options are defined for V850 implementations:
18382
18383'-mlong-calls'
18384'-mno-long-calls'
18385     Treat all calls as being far away (near).  If calls are assumed to
18386     be far away, the compiler always loads the function's address into
18387     a register, and calls indirect through the pointer.
18388
18389'-mno-ep'
18390'-mep'
18391     Do not optimize (do optimize) basic blocks that use the same index
18392     pointer 4 or more times to copy pointer into the 'ep' register, and
18393     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
18394     on by default if you optimize.
18395
18396'-mno-prolog-function'
18397'-mprolog-function'
18398     Do not use (do use) external functions to save and restore
18399     registers at the prologue and epilogue of a function.  The external
18400     functions are slower, but use less code space if more than one
18401     function saves the same number of registers.  The
18402     '-mprolog-function' option is on by default if you optimize.
18403
18404'-mspace'
18405     Try to make the code as small as possible.  At present, this just
18406     turns on the '-mep' and '-mprolog-function' options.
18407
18408'-mtda=N'
18409     Put static or global variables whose size is N bytes or less into
18410     the tiny data area that register 'ep' points to.  The tiny data
18411     area can hold up to 256 bytes in total (128 bytes for byte
18412     references).
18413
18414'-msda=N'
18415     Put static or global variables whose size is N bytes or less into
18416     the small data area that register 'gp' points to.  The small data
18417     area can hold up to 64 kilobytes.
18418
18419'-mzda=N'
18420     Put static or global variables whose size is N bytes or less into
18421     the first 32 kilobytes of memory.
18422
18423'-mv850'
18424     Specify that the target processor is the V850.
18425
18426'-mv850e3v5'
18427     Specify that the target processor is the V850E3V5.  The
18428     preprocessor constant '__v850e3v5__' is defined if this option is
18429     used.
18430
18431'-mv850e2v4'
18432     Specify that the target processor is the V850E3V5.  This is an
18433     alias for the '-mv850e3v5' option.
18434
18435'-mv850e2v3'
18436     Specify that the target processor is the V850E2V3.  The
18437     preprocessor constant '__v850e2v3__' is defined if this option is
18438     used.
18439
18440'-mv850e2'
18441     Specify that the target processor is the V850E2.  The preprocessor
18442     constant '__v850e2__' is defined if this option is used.
18443
18444'-mv850e1'
18445     Specify that the target processor is the V850E1.  The preprocessor
18446     constants '__v850e1__' and '__v850e__' are defined if this option
18447     is used.
18448
18449'-mv850es'
18450     Specify that the target processor is the V850ES. This is an alias
18451     for the '-mv850e1' option.
18452
18453'-mv850e'
18454     Specify that the target processor is the V850E.  The preprocessor
18455     constant '__v850e__' is defined if this option is used.
18456
18457     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
18458     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
18459     processor is chosen and the relevant '__v850*__' preprocessor
18460     constant is defined.
18461
18462     The preprocessor constants '__v850' and '__v851__' are always
18463     defined, regardless of which processor variant is the target.
18464
18465'-mdisable-callt'
18466'-mno-disable-callt'
18467     This option suppresses generation of the 'CALLT' instruction for
18468     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
18469     v850 architecture.
18470
18471     This option is enabled by default when the RH850 ABI is in use (see
18472     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
18473     If 'CALLT' instructions are being generated then the C preprocessor
18474     symbol '__V850_CALLT__' will be defined.
18475
18476'-mrelax'
18477'-mno-relax'
18478     Pass on (or do not pass on) the '-mrelax' command line option to
18479     the assembler.
18480
18481'-mlong-jumps'
18482'-mno-long-jumps'
18483     Disable (or re-enable) the generation of PC-relative jump
18484     instructions.
18485
18486'-msoft-float'
18487'-mhard-float'
18488     Disable (or re-enable) the generation of hardware floating point
18489     instructions.  This option is only significant when the target
18490     architecture is 'V850E2V3' or higher.  If hardware floating point
18491     instructions are being generated then the C preprocessor symbol
18492     '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__'
18493     will be defined.
18494
18495'-mloop'
18496     Enables the use of the e3v5 LOOP instruction.  The use of this
18497     instruction is not enabled by default when the e3v5 architecture is
18498     selected because its use is still experimental.
18499
18500'-mrh850-abi'
18501'-mghs'
18502     Enables support for the RH850 version of the V850 ABI. This is the
18503     default.  With this version of the ABI the following rules apply:
18504
18505        * Integer sized structures and unions are returned via a memory
18506          pointer rather than a register.
18507
18508        * Large structures and unions (more than 8 bytes in size) are
18509          passed by value.
18510
18511        * Functions are aligned to 16-bit boundaries.
18512
18513        * The '-m8byte-align' command line option is supported.
18514
18515        * The '-mdisable-callt' command line option is enabled by
18516          default.  The '-mno-disable-callt' command line option is not
18517          supported.
18518
18519     When this version of the ABI is enabled the C preprocessor symbol
18520     '__V850_RH850_ABI__' is defined.
18521
18522'-mgcc-abi'
18523     Enables support for the old GCC version of the V850 ABI. With this
18524     version of the ABI the following rules apply:
18525
18526        * Integer sized structures and unions are returned in register
18527          'r10'.
18528
18529        * Large structures and unions (more than 8 bytes in size) are
18530          passed by reference.
18531
18532        * Functions are aligned to 32-bit boundaries, unless optimizing
18533          for size.
18534
18535        * The '-m8byte-align' command line option is not supported.
18536
18537        * The '-mdisable-callt' command line option is supported but not
18538          enabled by default.
18539
18540     When this version of the ABI is enabled the C preprocessor symbol
18541     '__V850_GCC_ABI__' is defined.
18542
18543'-m8byte-align'
18544'-mno-8byte-align'
18545     Enables support for 'doubles' and 'long long' types to be aligned
18546     on 8-byte boundaries.  The default is to restrict the alignment of
18547     all objects to at most 4-bytes.  When '-m8byte-align' is in effect
18548     the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined.
18549
18550'-mbig-switch'
18551     Generate code suitable for big switch tables.  Use this option only
18552     if the assembler/linker complain about out of range branches within
18553     a switch table.
18554
18555'-mapp-regs'
18556     This option causes r2 and r5 to be used in the code generated by
18557     the compiler.  This setting is the default.
18558
18559'-mno-app-regs'
18560     This option causes r2 and r5 to be treated as fixed registers.
18561
18562
18563File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
18564
185653.17.46 VAX Options
18566-------------------
18567
18568These '-m' options are defined for the VAX:
18569
18570'-munix'
18571     Do not output certain jump instructions ('aobleq' and so on) that
18572     the Unix assembler for the VAX cannot handle across long ranges.
18573
18574'-mgnu'
18575     Do output those jump instructions, on the assumption that the GNU
18576     assembler is being used.
18577
18578'-mg'
18579     Output code for G-format floating-point numbers instead of
18580     D-format.
18581
18582
18583File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
18584
185853.17.47 VMS Options
18586-------------------
18587
18588These '-m' options are defined for the VMS implementations:
18589
18590'-mvms-return-codes'
18591     Return VMS condition codes from 'main'.  The default is to return
18592     POSIX-style condition (e.g. error) codes.
18593
18594'-mdebug-main=PREFIX'
18595     Flag the first routine whose name starts with PREFIX as the main
18596     routine for the debugger.
18597
18598'-mmalloc64'
18599     Default to 64-bit memory allocation routines.
18600
18601'-mpointer-size=SIZE'
18602     Set the default size of pointers.  Possible options for SIZE are
18603     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
18604     pointers, and 'no' for supporting only 32 bit pointers.  The later
18605     option disables 'pragma pointer_size'.
18606
18607
18608File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
18609
186103.17.48 VxWorks Options
18611-----------------------
18612
18613The options in this section are defined for all VxWorks targets.
18614Options specific to the target hardware are listed with the other
18615options for that target.
18616
18617'-mrtp'
18618     GCC can generate code for both VxWorks kernels and real time
18619     processes (RTPs).  This option switches from the former to the
18620     latter.  It also defines the preprocessor macro '__RTP__'.
18621
18622'-non-static'
18623     Link an RTP executable against shared libraries rather than static
18624     libraries.  The options '-static' and '-shared' can also be used
18625     for RTPs (*note Link Options::); '-static' is the default.
18626
18627'-Bstatic'
18628'-Bdynamic'
18629     These options are passed down to the linker.  They are defined for
18630     compatibility with Diab.
18631
18632'-Xbind-lazy'
18633     Enable lazy binding of function calls.  This option is equivalent
18634     to '-Wl,-z,now' and is defined for compatibility with Diab.
18635
18636'-Xbind-now'
18637     Disable lazy binding of function calls.  This option is the default
18638     and is defined for compatibility with Diab.
18639
18640
18641File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
18642
186433.17.49 x86-64 Options
18644----------------------
18645
18646These are listed under *Note i386 and x86-64 Options::.
18647
18648
18649File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
18650
186513.17.50 Xstormy16 Options
18652-------------------------
18653
18654These options are defined for Xstormy16:
18655
18656'-msim'
18657     Choose startup files and linker script suitable for the simulator.
18658
18659
18660File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
18661
186623.17.51 Xtensa Options
18663----------------------
18664
18665These options are supported for Xtensa targets:
18666
18667'-mconst16'
18668'-mno-const16'
18669     Enable or disable use of 'CONST16' instructions for loading
18670     constant values.  The 'CONST16' instruction is currently not a
18671     standard option from Tensilica.  When enabled, 'CONST16'
18672     instructions are always used in place of the standard 'L32R'
18673     instructions.  The use of 'CONST16' is enabled by default only if
18674     the 'L32R' instruction is not available.
18675
18676'-mfused-madd'
18677'-mno-fused-madd'
18678     Enable or disable use of fused multiply/add and multiply/subtract
18679     instructions in the floating-point option.  This has no effect if
18680     the floating-point option is not also enabled.  Disabling fused
18681     multiply/add and multiply/subtract instructions forces the compiler
18682     to use separate instructions for the multiply and add/subtract
18683     operations.  This may be desirable in some cases where strict IEEE
18684     754-compliant results are required: the fused multiply add/subtract
18685     instructions do not round the intermediate result, thereby
18686     producing results with _more_ bits of precision than specified by
18687     the IEEE standard.  Disabling fused multiply add/subtract
18688     instructions also ensures that the program output is not sensitive
18689     to the compiler's ability to combine multiply and add/subtract
18690     operations.
18691
18692'-mserialize-volatile'
18693'-mno-serialize-volatile'
18694     When this option is enabled, GCC inserts 'MEMW' instructions before
18695     'volatile' memory references to guarantee sequential consistency.
18696     The default is '-mserialize-volatile'.  Use
18697     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
18698
18699'-mforce-no-pic'
18700     For targets, like GNU/Linux, where all user-mode Xtensa code must
18701     be position-independent code (PIC), this option disables PIC for
18702     compiling kernel code.
18703
18704'-mtext-section-literals'
18705'-mno-text-section-literals'
18706     Control the treatment of literal pools.  The default is
18707     '-mno-text-section-literals', which places literals in a separate
18708     section in the output file.  This allows the literal pool to be
18709     placed in a data RAM/ROM, and it also allows the linker to combine
18710     literal pools from separate object files to remove redundant
18711     literals and improve code size.  With '-mtext-section-literals',
18712     the literals are interspersed in the text section in order to keep
18713     them as close as possible to their references.  This may be
18714     necessary for large assembly files.
18715
18716'-mtarget-align'
18717'-mno-target-align'
18718     When this option is enabled, GCC instructs the assembler to
18719     automatically align instructions to reduce branch penalties at the
18720     expense of some code density.  The assembler attempts to widen
18721     density instructions to align branch targets and the instructions
18722     following call instructions.  If there are not enough preceding
18723     safe density instructions to align a target, no widening is
18724     performed.  The default is '-mtarget-align'.  These options do not
18725     affect the treatment of auto-aligned instructions like 'LOOP',
18726     which the assembler always aligns, either by widening density
18727     instructions or by inserting NOP instructions.
18728
18729'-mlongcalls'
18730'-mno-longcalls'
18731     When this option is enabled, GCC instructs the assembler to
18732     translate direct calls to indirect calls unless it can determine
18733     that the target of a direct call is in the range allowed by the
18734     call instruction.  This translation typically occurs for calls to
18735     functions in other source files.  Specifically, the assembler
18736     translates a direct 'CALL' instruction into an 'L32R' followed by a
18737     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
18738     should be used in programs where the call target can potentially be
18739     out of range.  This option is implemented in the assembler, not the
18740     compiler, so the assembly code generated by GCC still shows direct
18741     call instructions--look at the disassembled object code to see the
18742     actual instructions.  Note that the assembler uses an indirect call
18743     for every cross-file call, not just those that really are out of
18744     range.
18745
18746
18747File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
18748
187493.17.52 zSeries Options
18750-----------------------
18751
18752These are listed under *Note S/390 and zSeries Options::.
18753
18754
18755File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
18756
187573.18 Options for Code Generation Conventions
18758============================================
18759
18760These machine-independent options control the interface conventions used
18761in code generation.
18762
18763 Most of them have both positive and negative forms; the negative form
18764of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
18765listed--the one that is not the default.  You can figure out the other
18766form by either removing 'no-' or adding it.
18767
18768'-fbounds-check'
18769     For front ends that support it, generate additional code to check
18770     that indices used to access arrays are within the declared range.
18771     This is currently only supported by the Java and Fortran front
18772     ends, where this option defaults to true and false respectively.
18773
18774'-fstack-reuse=REUSE-LEVEL'
18775     This option controls stack space reuse for user declared local/auto
18776     variables and compiler generated temporaries.  REUSE_LEVEL can be
18777     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
18778     local variables and temporaries, 'named_vars' enables the reuse
18779     only for user defined local variables with names, and 'none'
18780     disables stack reuse completely.  The default value is 'all'.  The
18781     option is needed when the program extends the lifetime of a scoped
18782     local variable or a compiler generated temporary beyond the end
18783     point defined by the language.  When a lifetime of a variable ends,
18784     and if the variable lives in memory, the optimizing compiler has
18785     the freedom to reuse its stack space with other temporaries or
18786     scoped local variables whose live range does not overlap with it.
18787     Legacy code extending local lifetime will likely to break with the
18788     stack reuse optimization.
18789
18790     For example,
18791
18792             int *p;
18793             {
18794               int local1;
18795
18796               p = &local1;
18797               local1 = 10;
18798               ....
18799             }
18800             {
18801                int local2;
18802                local2 = 20;
18803                ...
18804             }
18805
18806             if (*p == 10)  // out of scope use of local1
18807               {
18808
18809               }
18810
18811     Another example:
18812
18813             struct A
18814             {
18815                 A(int k) : i(k), j(k) { }
18816                 int i;
18817                 int j;
18818             };
18819
18820             A *ap;
18821
18822             void foo(const A& ar)
18823             {
18824                ap = &ar;
18825             }
18826
18827             void bar()
18828             {
18829                foo(A(10)); // temp object's lifetime ends when foo returns
18830
18831                {
18832                  A a(20);
18833                  ....
18834                }
18835                ap->i+= 10;  // ap references out of scope temp whose space
18836                             // is reused with a. What is the value of ap->i?
18837             }
18838
18839
18840     The lifetime of a compiler generated temporary is well defined by
18841     the C++ standard.  When a lifetime of a temporary ends, and if the
18842     temporary lives in memory, the optimizing compiler has the freedom
18843     to reuse its stack space with other temporaries or scoped local
18844     variables whose live range does not overlap with it.  However some
18845     of the legacy code relies on the behavior of older compilers in
18846     which temporaries' stack space is not reused, the aggressive stack
18847     reuse can lead to runtime errors.  This option is used to control
18848     the temporary stack reuse optimization.
18849
18850'-ftrapv'
18851     This option generates traps for signed overflow on addition,
18852     subtraction, multiplication operations.
18853
18854'-fwrapv'
18855     This option instructs the compiler to assume that signed arithmetic
18856     overflow of addition, subtraction and multiplication wraps around
18857     using twos-complement representation.  This flag enables some
18858     optimizations and disables others.  This option is enabled by
18859     default for the Java front end, as required by the Java language
18860     specification.
18861
18862'-fexceptions'
18863     Enable exception handling.  Generates extra code needed to
18864     propagate exceptions.  For some targets, this implies GCC generates
18865     frame unwind information for all functions, which can produce
18866     significant data size overhead, although it does not affect
18867     execution.  If you do not specify this option, GCC enables it by
18868     default for languages like C++ that normally require exception
18869     handling, and disables it for languages like C that do not normally
18870     require it.  However, you may need to enable this option when
18871     compiling C code that needs to interoperate properly with exception
18872     handlers written in C++.  You may also wish to disable this option
18873     if you are compiling older C++ programs that don't use exception
18874     handling.
18875
18876'-fnon-call-exceptions'
18877     Generate code that allows trapping instructions to throw
18878     exceptions.  Note that this requires platform-specific runtime
18879     support that does not exist everywhere.  Moreover, it only allows
18880     _trapping_ instructions to throw exceptions, i.e. memory references
18881     or floating-point instructions.  It does not allow exceptions to be
18882     thrown from arbitrary signal handlers such as 'SIGALRM'.
18883
18884'-fdelete-dead-exceptions'
18885     Consider that instructions that may throw exceptions but don't
18886     otherwise contribute to the execution of the program can be
18887     optimized away.  This option is enabled by default for the Ada
18888     front end, as permitted by the Ada language specification.
18889     Optimization passes that cause dead exceptions to be removed are
18890     enabled independently at different optimization levels.
18891
18892'-funwind-tables'
18893     Similar to '-fexceptions', except that it just generates any needed
18894     static data, but does not affect the generated code in any other
18895     way.  You normally do not need to enable this option; instead, a
18896     language processor that needs this handling enables it on your
18897     behalf.
18898
18899'-fasynchronous-unwind-tables'
18900     Generate unwind table in DWARF 2 format, if supported by target
18901     machine.  The table is exact at each instruction boundary, so it
18902     can be used for stack unwinding from asynchronous events (such as
18903     debugger or garbage collector).
18904
18905'-fpcc-struct-return'
18906     Return "short" 'struct' and 'union' values in memory like longer
18907     ones, rather than in registers.  This convention is less efficient,
18908     but it has the advantage of allowing intercallability between
18909     GCC-compiled files and files compiled with other compilers,
18910     particularly the Portable C Compiler (pcc).
18911
18912     The precise convention for returning structures in memory depends
18913     on the target configuration macros.
18914
18915     Short structures and unions are those whose size and alignment
18916     match that of some integer type.
18917
18918     *Warning:* code compiled with the '-fpcc-struct-return' switch is
18919     not binary compatible with code compiled with the
18920     '-freg-struct-return' switch.  Use it to conform to a non-default
18921     application binary interface.
18922
18923'-freg-struct-return'
18924     Return 'struct' and 'union' values in registers when possible.
18925     This is more efficient for small structures than
18926     '-fpcc-struct-return'.
18927
18928     If you specify neither '-fpcc-struct-return' nor
18929     '-freg-struct-return', GCC defaults to whichever convention is
18930     standard for the target.  If there is no standard convention, GCC
18931     defaults to '-fpcc-struct-return', except on targets where GCC is
18932     the principal compiler.  In those cases, we can choose the
18933     standard, and we chose the more efficient register return
18934     alternative.
18935
18936     *Warning:* code compiled with the '-freg-struct-return' switch is
18937     not binary compatible with code compiled with the
18938     '-fpcc-struct-return' switch.  Use it to conform to a non-default
18939     application binary interface.
18940
18941'-fshort-enums'
18942     Allocate to an 'enum' type only as many bytes as it needs for the
18943     declared range of possible values.  Specifically, the 'enum' type
18944     is equivalent to the smallest integer type that has enough room.
18945
18946     *Warning:* the '-fshort-enums' switch causes GCC to generate code
18947     that is not binary compatible with code generated without that
18948     switch.  Use it to conform to a non-default application binary
18949     interface.
18950
18951'-fshort-double'
18952     Use the same size for 'double' as for 'float'.
18953
18954     *Warning:* the '-fshort-double' switch causes GCC to generate code
18955     that is not binary compatible with code generated without that
18956     switch.  Use it to conform to a non-default application binary
18957     interface.
18958
18959'-fshort-wchar'
18960     Override the underlying type for 'wchar_t' to be 'short unsigned
18961     int' instead of the default for the target.  This option is useful
18962     for building programs to run under WINE.
18963
18964     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
18965     that is not binary compatible with code generated without that
18966     switch.  Use it to conform to a non-default application binary
18967     interface.
18968
18969'-fno-common'
18970     In C code, controls the placement of uninitialized global
18971     variables.  Unix C compilers have traditionally permitted multiple
18972     definitions of such variables in different compilation units by
18973     placing the variables in a common block.  This is the behavior
18974     specified by '-fcommon', and is the default for GCC on most
18975     targets.  On the other hand, this behavior is not required by ISO
18976     C, and on some targets may carry a speed or code size penalty on
18977     variable references.  The '-fno-common' option specifies that the
18978     compiler should place uninitialized global variables in the data
18979     section of the object file, rather than generating them as common
18980     blocks.  This has the effect that if the same variable is declared
18981     (without 'extern') in two different compilations, you get a
18982     multiple-definition error when you link them.  In this case, you
18983     must compile with '-fcommon' instead.  Compiling with '-fno-common'
18984     is useful on targets for which it provides better performance, or
18985     if you wish to verify that the program will work on other systems
18986     that always treat uninitialized variable declarations this way.
18987
18988'-fno-ident'
18989     Ignore the '#ident' directive.
18990
18991'-finhibit-size-directive'
18992     Don't output a '.size' assembler directive, or anything else that
18993     would cause trouble if the function is split in the middle, and the
18994     two halves are placed at locations far apart in memory.  This
18995     option is used when compiling 'crtstuff.c'; you should not need to
18996     use it for anything else.
18997
18998'-fverbose-asm'
18999     Put extra commentary information in the generated assembly code to
19000     make it more readable.  This option is generally only of use to
19001     those who actually need to read the generated assembly code
19002     (perhaps while debugging the compiler itself).
19003
19004     '-fno-verbose-asm', the default, causes the extra information to be
19005     omitted and is useful when comparing two assembler files.
19006
19007'-frecord-gcc-switches'
19008     This switch causes the command line used to invoke the compiler to
19009     be recorded into the object file that is being created.  This
19010     switch is only implemented on some targets and the exact format of
19011     the recording is target and binary file format dependent, but it
19012     usually takes the form of a section containing ASCII text.  This
19013     switch is related to the '-fverbose-asm' switch, but that switch
19014     only records information in the assembler output file as comments,
19015     so it never reaches the object file.  See also
19016     '-grecord-gcc-switches' for another way of storing compiler options
19017     into the object file.
19018
19019'-fpic'
19020     Generate position-independent code (PIC) suitable for use in a
19021     shared library, if supported for the target machine.  Such code
19022     accesses all constant addresses through a global offset table
19023     (GOT).  The dynamic loader resolves the GOT entries when the
19024     program starts (the dynamic loader is not part of GCC; it is part
19025     of the operating system).  If the GOT size for the linked
19026     executable exceeds a machine-specific maximum size, you get an
19027     error message from the linker indicating that '-fpic' does not
19028     work; in that case, recompile with '-fPIC' instead.  (These
19029     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
19030     386 has no such limit.)
19031
19032     Position-independent code requires special support, and therefore
19033     works only on certain machines.  For the 386, GCC supports PIC for
19034     System V but not for the Sun 386i.  Code generated for the IBM
19035     RS/6000 is always position-independent.
19036
19037     When this flag is set, the macros '__pic__' and '__PIC__' are
19038     defined to 1.
19039
19040'-fPIC'
19041     If supported for the target machine, emit position-independent
19042     code, suitable for dynamic linking and avoiding any limit on the
19043     size of the global offset table.  This option makes a difference on
19044     the m68k, PowerPC and SPARC.
19045
19046     Position-independent code requires special support, and therefore
19047     works only on certain machines.
19048
19049     When this flag is set, the macros '__pic__' and '__PIC__' are
19050     defined to 2.
19051
19052'-fpie'
19053'-fPIE'
19054     These options are similar to '-fpic' and '-fPIC', but generated
19055     position independent code can be only linked into executables.
19056     Usually these options are used when '-pie' GCC option is used
19057     during linking.
19058
19059     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
19060     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
19061
19062'-fno-jump-tables'
19063     Do not use jump tables for switch statements even where it would be
19064     more efficient than other code generation strategies.  This option
19065     is of use in conjunction with '-fpic' or '-fPIC' for building code
19066     that forms part of a dynamic linker and cannot reference the
19067     address of a jump table.  On some targets, jump tables do not
19068     require a GOT and this option is not needed.
19069
19070'-ffixed-REG'
19071     Treat the register named REG as a fixed register; generated code
19072     should never refer to it (except perhaps as a stack pointer, frame
19073     pointer or in some other fixed role).
19074
19075     REG must be the name of a register.  The register names accepted
19076     are machine-specific and are defined in the 'REGISTER_NAMES' macro
19077     in the machine description macro file.
19078
19079     This flag does not have a negative form, because it specifies a
19080     three-way choice.
19081
19082'-fcall-used-REG'
19083     Treat the register named REG as an allocable register that is
19084     clobbered by function calls.  It may be allocated for temporaries
19085     or variables that do not live across a call.  Functions compiled
19086     this way do not save and restore the register REG.
19087
19088     It is an error to use this flag with the frame pointer or stack
19089     pointer.  Use of this flag for other registers that have fixed
19090     pervasive roles in the machine's execution model produces
19091     disastrous results.
19092
19093     This flag does not have a negative form, because it specifies a
19094     three-way choice.
19095
19096'-fcall-saved-REG'
19097     Treat the register named REG as an allocable register saved by
19098     functions.  It may be allocated even for temporaries or variables
19099     that live across a call.  Functions compiled this way save and
19100     restore the register REG if they use it.
19101
19102     It is an error to use this flag with the frame pointer or stack
19103     pointer.  Use of this flag for other registers that have fixed
19104     pervasive roles in the machine's execution model produces
19105     disastrous results.
19106
19107     A different sort of disaster results from the use of this flag for
19108     a register in which function values may be returned.
19109
19110     This flag does not have a negative form, because it specifies a
19111     three-way choice.
19112
19113'-fpack-struct[=N]'
19114     Without a value specified, pack all structure members together
19115     without holes.  When a value is specified (which must be a small
19116     power of two), pack structure members according to this value,
19117     representing the maximum alignment (that is, objects with default
19118     alignment requirements larger than this are output potentially
19119     unaligned at the next fitting location.
19120
19121     *Warning:* the '-fpack-struct' switch causes GCC to generate code
19122     that is not binary compatible with code generated without that
19123     switch.  Additionally, it makes the code suboptimal.  Use it to
19124     conform to a non-default application binary interface.
19125
19126'-finstrument-functions'
19127     Generate instrumentation calls for entry and exit to functions.
19128     Just after function entry and just before function exit, the
19129     following profiling functions are called with the address of the
19130     current function and its call site.  (On some platforms,
19131     '__builtin_return_address' does not work beyond the current
19132     function, so the call site information may not be available to the
19133     profiling functions otherwise.)
19134
19135          void __cyg_profile_func_enter (void *this_fn,
19136                                         void *call_site);
19137          void __cyg_profile_func_exit  (void *this_fn,
19138                                         void *call_site);
19139
19140     The first argument is the address of the start of the current
19141     function, which may be looked up exactly in the symbol table.
19142
19143     This instrumentation is also done for functions expanded inline in
19144     other functions.  The profiling calls indicate where, conceptually,
19145     the inline function is entered and exited.  This means that
19146     addressable versions of such functions must be available.  If all
19147     your uses of a function are expanded inline, this may mean an
19148     additional expansion of code size.  If you use 'extern inline' in
19149     your C code, an addressable version of such functions must be
19150     provided.  (This is normally the case anyway, but if you get lucky
19151     and the optimizer always expands the functions inline, you might
19152     have gotten away without providing static copies.)
19153
19154     A function may be given the attribute 'no_instrument_function', in
19155     which case this instrumentation is not done.  This can be used, for
19156     example, for the profiling functions listed above, high-priority
19157     interrupt routines, and any functions from which the profiling
19158     functions cannot safely be called (perhaps signal handlers, if the
19159     profiling routines generate output or allocate memory).
19160
19161'-finstrument-functions-exclude-file-list=FILE,FILE,...'
19162
19163     Set the list of functions that are excluded from instrumentation
19164     (see the description of '-finstrument-functions').  If the file
19165     that contains a function definition matches with one of FILE, then
19166     that function is not instrumented.  The match is done on
19167     substrings: if the FILE parameter is a substring of the file name,
19168     it is considered to be a match.
19169
19170     For example:
19171
19172          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
19173
19174     excludes any inline function defined in files whose pathnames
19175     contain '/bits/stl' or 'include/sys'.
19176
19177     If, for some reason, you want to include letter '','' in one of
19178     SYM, write ''\,''.  For example,
19179     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
19180     single quote surrounding the option).
19181
19182'-finstrument-functions-exclude-function-list=SYM,SYM,...'
19183
19184     This is similar to '-finstrument-functions-exclude-file-list', but
19185     this option sets the list of function names to be excluded from
19186     instrumentation.  The function name to be matched is its
19187     user-visible name, such as 'vector<int> blah(const vector<int> &)',
19188     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
19189     The match is done on substrings: if the SYM parameter is a
19190     substring of the function name, it is considered to be a match.
19191     For C99 and C++ extended identifiers, the function name must be
19192     given in UTF-8, not using universal character names.
19193
19194'-fstack-check'
19195     Generate code to verify that you do not go beyond the boundary of
19196     the stack.  You should specify this flag if you are running in an
19197     environment with multiple threads, but you only rarely need to
19198     specify it in a single-threaded environment since stack overflow is
19199     automatically detected on nearly all systems if there is only one
19200     stack.
19201
19202     Note that this switch does not actually cause checking to be done;
19203     the operating system or the language runtime must do that.  The
19204     switch causes generation of code to ensure that they see the stack
19205     being extended.
19206
19207     You can additionally specify a string parameter: 'no' means no
19208     checking, 'generic' means force the use of old-style checking,
19209     'specific' means use the best checking method and is equivalent to
19210     bare '-fstack-check'.
19211
19212     Old-style checking is a generic mechanism that requires no specific
19213     target support in the compiler but comes with the following
19214     drawbacks:
19215
19216       1. Modified allocation strategy for large objects: they are
19217          always allocated dynamically if their size exceeds a fixed
19218          threshold.
19219
19220       2. Fixed limit on the size of the static frame of functions: when
19221          it is topped by a particular function, stack checking is not
19222          reliable and a warning is issued by the compiler.
19223
19224       3. Inefficiency: because of both the modified allocation strategy
19225          and the generic implementation, code performance is hampered.
19226
19227     Note that old-style stack checking is also the fallback method for
19228     'specific' if no target support has been added in the compiler.
19229
19230'-fstack-limit-register=REG'
19231'-fstack-limit-symbol=SYM'
19232'-fno-stack-limit'
19233     Generate code to ensure that the stack does not grow beyond a
19234     certain value, either the value of a register or the address of a
19235     symbol.  If a larger stack is required, a signal is raised at run
19236     time.  For most targets, the signal is raised before the stack
19237     overruns the boundary, so it is possible to catch the signal
19238     without taking special precautions.
19239
19240     For instance, if the stack starts at absolute address '0x80000000'
19241     and grows downwards, you can use the flags
19242     '-fstack-limit-symbol=__stack_limit' and
19243     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
19244     128KB.  Note that this may only work with the GNU linker.
19245
19246'-fsplit-stack'
19247     Generate code to automatically split the stack before it overflows.
19248     The resulting program has a discontiguous stack which can only
19249     overflow if the program is unable to allocate any more memory.
19250     This is most useful when running threaded programs, as it is no
19251     longer necessary to calculate a good stack size to use for each
19252     thread.  This is currently only implemented for the i386 and x86_64
19253     back ends running GNU/Linux.
19254
19255     When code compiled with '-fsplit-stack' calls code compiled without
19256     '-fsplit-stack', there may not be much stack space available for
19257     the latter code to run.  If compiling all code, including library
19258     code, with '-fsplit-stack' is not an option, then the linker can
19259     fix up these calls so that the code compiled without
19260     '-fsplit-stack' always has a large stack.  Support for this is
19261     implemented in the gold linker in GNU binutils release 2.21 and
19262     later.
19263
19264'-fleading-underscore'
19265     This option and its counterpart, '-fno-leading-underscore',
19266     forcibly change the way C symbols are represented in the object
19267     file.  One use is to help link with legacy assembly code.
19268
19269     *Warning:* the '-fleading-underscore' switch causes GCC to generate
19270     code that is not binary compatible with code generated without that
19271     switch.  Use it to conform to a non-default application binary
19272     interface.  Not all targets provide complete support for this
19273     switch.
19274
19275'-ftls-model=MODEL'
19276     Alter the thread-local storage model to be used (*note
19277     Thread-Local::).  The MODEL argument should be one of
19278     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
19279
19280     The default without '-fpic' is 'initial-exec'; with '-fpic' the
19281     default is 'global-dynamic'.
19282
19283'-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
19284     Set the default ELF image symbol visibility to the specified
19285     option--all symbols are marked with this unless overridden within
19286     the code.  Using this feature can very substantially improve
19287     linking and load times of shared object libraries, produce more
19288     optimized code, provide near-perfect API export and prevent symbol
19289     clashes.  It is *strongly* recommended that you use this in any
19290     shared objects you distribute.
19291
19292     Despite the nomenclature, 'default' always means public; i.e.,
19293     available to be linked against from outside the shared object.
19294     'protected' and 'internal' are pretty useless in real-world usage
19295     so the only other commonly used option is 'hidden'.  The default if
19296     '-fvisibility' isn't specified is 'default', i.e., make every
19297     symbol public--this causes the same behavior as previous versions
19298     of GCC.
19299
19300     A good explanation of the benefits offered by ensuring ELF symbols
19301     have the correct visibility is given by "How To Write Shared
19302     Libraries" by Ulrich Drepper (which can be found at
19303     <http://people.redhat.com/~drepper/>)--however a superior solution
19304     made possible by this option to marking things hidden when the
19305     default is public is to make the default hidden and mark things
19306     public.  This is the norm with DLLs on Windows and with
19307     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
19308     instead of '__declspec(dllexport)' you get almost identical
19309     semantics with identical syntax.  This is a great boon to those
19310     working with cross-platform projects.
19311
19312     For those adding visibility support to existing code, you may find
19313     '#pragma GCC visibility' of use.  This works by you enclosing the
19314     declarations you wish to set visibility for with (for example)
19315     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
19316     pop'.  Bear in mind that symbol visibility should be viewed *as
19317     part of the API interface contract* and thus all new code should
19318     always specify visibility when it is not the default; i.e.,
19319     declarations only for use within the local DSO should *always* be
19320     marked explicitly as hidden as so to avoid PLT indirection
19321     overheads--making this abundantly clear also aids readability and
19322     self-documentation of the code.  Note that due to ISO C++
19323     specification requirements, 'operator new' and 'operator delete'
19324     must always be of default visibility.
19325
19326     Be aware that headers from outside your project, in particular
19327     system headers and headers from any other library you use, may not
19328     be expecting to be compiled with visibility other than the default.
19329     You may need to explicitly say '#pragma GCC visibility
19330     push(default)' before including any such headers.
19331
19332     'extern' declarations are not affected by '-fvisibility', so a lot
19333     of code can be recompiled with '-fvisibility=hidden' with no
19334     modifications.  However, this means that calls to 'extern'
19335     functions with no explicit visibility use the PLT, so it is more
19336     effective to use '__attribute ((visibility))' and/or '#pragma GCC
19337     visibility' to tell the compiler which 'extern' declarations should
19338     be treated as hidden.
19339
19340     Note that '-fvisibility' does affect C++ vague linkage entities.
19341     This means that, for instance, an exception class that is be thrown
19342     between DSOs must be explicitly marked with default visibility so
19343     that the 'type_info' nodes are unified between the DSOs.
19344
19345     An overview of these techniques, their benefits and how to use them
19346     is at <http://gcc.gnu.org/wiki/Visibility>.
19347
19348'-fstrict-volatile-bitfields'
19349     This option should be used if accesses to volatile bit-fields (or
19350     other structure fields, although the compiler usually honors those
19351     types anyway) should use a single access of the width of the
19352     field's type, aligned to a natural alignment if possible.  For
19353     example, targets with memory-mapped peripheral registers might
19354     require all such accesses to be 16 bits wide; with this flag you
19355     can declare all peripheral bit-fields as 'unsigned short' (assuming
19356     short is 16 bits on these targets) to force GCC to use 16-bit
19357     accesses instead of, perhaps, a more efficient 32-bit access.
19358
19359     If this option is disabled, the compiler uses the most efficient
19360     instruction.  In the previous example, that might be a 32-bit load
19361     instruction, even though that accesses bytes that do not contain
19362     any portion of the bit-field, or memory-mapped registers unrelated
19363     to the one being updated.
19364
19365     If the target requires strict alignment, and honoring the field
19366     type would require violating this alignment, a warning is issued.
19367     If the field has 'packed' attribute, the access is done without
19368     honoring the field type.  If the field doesn't have 'packed'
19369     attribute, the access is done honoring the field type.  In both
19370     cases, GCC assumes that the user knows something about the target
19371     hardware that it is unaware of.
19372
19373     The default value of this option is determined by the application
19374     binary interface for the target processor.
19375
19376'-fsync-libcalls'
19377     This option controls whether any out-of-line instance of the
19378     '__sync' family of functions may be used to implement the C++11
19379     '__atomic' family of functions.
19380
19381     The default value of this option is enabled, thus the only useful
19382     form of the option is '-fno-sync-libcalls'.  This option is used in
19383     the implementation of the 'libatomic' runtime library.
19384
19385
19386File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
19387
193883.19 Environment Variables Affecting GCC
19389========================================
19390
19391This section describes several environment variables that affect how GCC
19392operates.  Some of them work by specifying directories or prefixes to
19393use when searching for various kinds of files.  Some are used to specify
19394other aspects of the compilation environment.
19395
19396 Note that you can also specify places to search using options such as
19397'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
19398over places specified using environment variables, which in turn take
19399precedence over those specified by the configuration of GCC.  *Note
19400Controlling the Compilation Driver 'gcc': (gccint)Driver.
19401
19402'LANG'
19403'LC_CTYPE'
19404'LC_MESSAGES'
19405'LC_ALL'
19406     These environment variables control the way that GCC uses
19407     localization information which allows GCC to work with different
19408     national conventions.  GCC inspects the locale categories
19409     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
19410     These locale categories can be set to any value supported by your
19411     installation.  A typical value is 'en_GB.UTF-8' for English in the
19412     United Kingdom encoded in UTF-8.
19413
19414     The 'LC_CTYPE' environment variable specifies character
19415     classification.  GCC uses it to determine the character boundaries
19416     in a string; this is needed for some multibyte encodings that
19417     contain quote and escape characters that are otherwise interpreted
19418     as a string end or escape.
19419
19420     The 'LC_MESSAGES' environment variable specifies the language to
19421     use in diagnostic messages.
19422
19423     If the 'LC_ALL' environment variable is set, it overrides the value
19424     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
19425     'LC_MESSAGES' default to the value of the 'LANG' environment
19426     variable.  If none of these variables are set, GCC defaults to
19427     traditional C English behavior.
19428
19429'TMPDIR'
19430     If 'TMPDIR' is set, it specifies the directory to use for temporary
19431     files.  GCC uses temporary files to hold the output of one stage of
19432     compilation which is to be used as input to the next stage: for
19433     example, the output of the preprocessor, which is the input to the
19434     compiler proper.
19435
19436'GCC_COMPARE_DEBUG'
19437     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
19438     '-fcompare-debug' to the compiler driver.  See the documentation of
19439     this option for more details.
19440
19441'GCC_EXEC_PREFIX'
19442     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
19443     names of the subprograms executed by the compiler.  No slash is
19444     added when this prefix is combined with the name of a subprogram,
19445     but you can specify a prefix that ends with a slash if you wish.
19446
19447     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
19448     appropriate prefix to use based on the pathname it is invoked with.
19449
19450     If GCC cannot find the subprogram using the specified prefix, it
19451     tries looking in the usual places for the subprogram.
19452
19453     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
19454     PREFIX is the prefix to the installed compiler.  In many cases
19455     PREFIX is the value of 'prefix' when you ran the 'configure'
19456     script.
19457
19458     Other prefixes specified with '-B' take precedence over this
19459     prefix.
19460
19461     This prefix is also used for finding files such as 'crt0.o' that
19462     are used for linking.
19463
19464     In addition, the prefix is used in an unusual way in finding the
19465     directories to search for header files.  For each of the standard
19466     directories whose name normally begins with '/usr/local/lib/gcc'
19467     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
19468     replacing that beginning with the specified prefix to produce an
19469     alternate directory name.  Thus, with '-Bfoo/', GCC searches
19470     'foo/bar' just before it searches the standard directory
19471     '/usr/local/lib/bar'.  If a standard directory begins with the
19472     configured PREFIX then the value of PREFIX is replaced by
19473     'GCC_EXEC_PREFIX' when looking for header files.
19474
19475'COMPILER_PATH'
19476     The value of 'COMPILER_PATH' is a colon-separated list of
19477     directories, much like 'PATH'.  GCC tries the directories thus
19478     specified when searching for subprograms, if it can't find the
19479     subprograms using 'GCC_EXEC_PREFIX'.
19480
19481'LIBRARY_PATH'
19482     The value of 'LIBRARY_PATH' is a colon-separated list of
19483     directories, much like 'PATH'.  When configured as a native
19484     compiler, GCC tries the directories thus specified when searching
19485     for special linker files, if it can't find them using
19486     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
19487     when searching for ordinary libraries for the '-l' option (but
19488     directories specified with '-L' come first).
19489
19490'LANG'
19491     This variable is used to pass locale information to the compiler.
19492     One way in which this information is used is to determine the
19493     character set to be used when character literals, string literals
19494     and comments are parsed in C and C++.  When the compiler is
19495     configured to allow multibyte characters, the following values for
19496     'LANG' are recognized:
19497
19498     'C-JIS'
19499          Recognize JIS characters.
19500     'C-SJIS'
19501          Recognize SJIS characters.
19502     'C-EUCJP'
19503          Recognize EUCJP characters.
19504
19505     If 'LANG' is not defined, or if it has some other value, then the
19506     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
19507     to recognize and translate multibyte characters.
19508
19509Some additional environment variables affect the behavior of the
19510preprocessor.
19511
19512'CPATH'
19513'C_INCLUDE_PATH'
19514'CPLUS_INCLUDE_PATH'
19515'OBJC_INCLUDE_PATH'
19516     Each variable's value is a list of directories separated by a
19517     special character, much like 'PATH', in which to look for header
19518     files.  The special character, 'PATH_SEPARATOR', is
19519     target-dependent and determined at GCC build time.  For Microsoft
19520     Windows-based targets it is a semicolon, and for almost all other
19521     targets it is a colon.
19522
19523     'CPATH' specifies a list of directories to be searched as if
19524     specified with '-I', but after any paths given with '-I' options on
19525     the command line.  This environment variable is used regardless of
19526     which language is being preprocessed.
19527
19528     The remaining environment variables apply only when preprocessing
19529     the particular language indicated.  Each specifies a list of
19530     directories to be searched as if specified with '-isystem', but
19531     after any paths given with '-isystem' options on the command line.
19532
19533     In all these variables, an empty element instructs the compiler to
19534     search its current working directory.  Empty elements can appear at
19535     the beginning or end of a path.  For instance, if the value of
19536     'CPATH' is ':/special/include', that has the same effect as
19537     '-I. -I/special/include'.
19538
19539'DEPENDENCIES_OUTPUT'
19540     If this variable is set, its value specifies how to output
19541     dependencies for Make based on the non-system header files
19542     processed by the compiler.  System header files are ignored in the
19543     dependency output.
19544
19545     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
19546     which case the Make rules are written to that file, guessing the
19547     target name from the source file name.  Or the value can have the
19548     form 'FILE TARGET', in which case the rules are written to file
19549     FILE using TARGET as the target name.
19550
19551     In other words, this environment variable is equivalent to
19552     combining the options '-MM' and '-MF' (*note Preprocessor
19553     Options::), with an optional '-MT' switch too.
19554
19555'SUNPRO_DEPENDENCIES'
19556     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
19557     except that system header files are not ignored, so it implies '-M'
19558     rather than '-MM'.  However, the dependence on the main input file
19559     is omitted.  *Note Preprocessor Options::.
19560
19561
19562File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
19563
195643.20 Using Precompiled Headers
19565==============================
19566
19567Often large projects have many header files that are included in every
19568source file.  The time the compiler takes to process these header files
19569over and over again can account for nearly all of the time required to
19570build the project.  To make builds faster, GCC allows you to
19571"precompile" a header file.
19572
19573 To create a precompiled header file, simply compile it as you would any
19574other file, if necessary using the '-x' option to make the driver treat
19575it as a C or C++ header file.  You may want to use a tool like 'make' to
19576keep the precompiled header up-to-date when the headers it contains
19577change.
19578
19579 A precompiled header file is searched for when '#include' is seen in
19580the compilation.  As it searches for the included file (*note Search
19581Path: (cpp)Search Path.) the compiler looks for a precompiled header in
19582each directory just before it looks for the include file in that
19583directory.  The name searched for is the name specified in the
19584'#include' with '.gch' appended.  If the precompiled header file can't
19585be used, it is ignored.
19586
19587 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
19588in the same directory as 'all.h', then the precompiled header file is
19589used if possible, and the original header is used otherwise.
19590
19591 Alternatively, you might decide to put the precompiled header file in a
19592directory and use '-I' to ensure that directory is searched before (or
19593instead of) the directory containing the original header.  Then, if you
19594want to check that the precompiled header file is always used, you can
19595put a file of the same name as the original header in this directory
19596containing an '#error' command.
19597
19598 This also works with '-include'.  So yet another way to use precompiled
19599headers, good for projects not designed with precompiled header files in
19600mind, is to simply take most of the header files used by a project,
19601include them from another header file, precompile that header file, and
19602'-include' the precompiled header.  If the header files have guards
19603against multiple inclusion, they are skipped because they've already
19604been included (in the precompiled header).
19605
19606 If you need to precompile the same header file for different languages,
19607targets, or compiler options, you can instead make a _directory_ named
19608like 'all.h.gch', and put each precompiled header in the directory,
19609perhaps using '-o'.  It doesn't matter what you call the files in the
19610directory; every precompiled header in the directory is considered.  The
19611first precompiled header encountered in the directory that is valid for
19612this compilation is used; they're searched in no particular order.
19613
19614 There are many other possibilities, limited only by your imagination,
19615good sense, and the constraints of your build system.
19616
19617 A precompiled header file can be used only when these conditions apply:
19618
19619   * Only one precompiled header can be used in a particular
19620     compilation.
19621
19622   * A precompiled header can't be used once the first C token is seen.
19623     You can have preprocessor directives before a precompiled header;
19624     you cannot include a precompiled header from inside another header.
19625
19626   * The precompiled header file must be produced for the same language
19627     as the current compilation.  You can't use a C precompiled header
19628     for a C++ compilation.
19629
19630   * The precompiled header file must have been produced by the same
19631     compiler binary as the current compilation is using.
19632
19633   * Any macros defined before the precompiled header is included must
19634     either be defined in the same way as when the precompiled header
19635     was generated, or must not affect the precompiled header, which
19636     usually means that they don't appear in the precompiled header at
19637     all.
19638
19639     The '-D' option is one way to define a macro before a precompiled
19640     header is included; using a '#define' can also do it.  There are
19641     also some options that define macros implicitly, like '-O' and
19642     '-Wdeprecated'; the same rule applies to macros defined this way.
19643
19644   * If debugging information is output when using the precompiled
19645     header, using '-g' or similar, the same kind of debugging
19646     information must have been output when building the precompiled
19647     header.  However, a precompiled header built using '-g' can be used
19648     in a compilation when no debugging information is being output.
19649
19650   * The same '-m' options must generally be used when building and
19651     using the precompiled header.  *Note Submodel Options::, for any
19652     cases where this rule is relaxed.
19653
19654   * Each of the following options must be the same when building and
19655     using the precompiled header:
19656
19657          -fexceptions
19658
19659   * Some other command-line options starting with '-f', '-p', or '-O'
19660     must be defined in the same way as when the precompiled header was
19661     generated.  At present, it's not clear which options are safe to
19662     change and which are not; the safest choice is to use exactly the
19663     same options when generating and using the precompiled header.  The
19664     following are known to be safe:
19665
19666          -fmessage-length=  -fpreprocessed  -fsched-interblock
19667          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
19668          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
19669          -pedantic-errors
19670
19671 For all of these except the last, the compiler automatically ignores
19672the precompiled header if the conditions aren't met.  If you find an
19673option combination that doesn't work and doesn't cause the precompiled
19674header to be ignored, please consider filing a bug report, see *note
19675Bugs::.
19676
19677 If you do use differing options when generating and using the
19678precompiled header, the actual behavior is a mixture of the behavior for
19679the options.  For instance, if you use '-g' to generate the precompiled
19680header but not when using it, you may or may not get debugging
19681information for routines in the precompiled header.
19682
19683
19684File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
19685
196864 C Implementation-defined behavior
19687***********************************
19688
19689A conforming implementation of ISO C is required to document its choice
19690of behavior in each of the areas that are designated "implementation
19691defined".  The following lists all such areas, along with the section
19692numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
19693Some areas are only implementation-defined in one version of the
19694standard.
19695
19696 Some choices depend on the externally determined ABI for the platform
19697(including standard character encodings) which GCC follows; these are
19698listed as "determined by ABI" below.  *Note Binary Compatibility:
19699Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
19700documented in the preprocessor manual.  *Note Implementation-defined
19701behavior: (cpp)Implementation-defined behavior.  Some choices are made
19702by the library and operating system (or other environment when compiling
19703for a freestanding environment); refer to their documentation for
19704details.
19705
19706* Menu:
19707
19708* Translation implementation::
19709* Environment implementation::
19710* Identifiers implementation::
19711* Characters implementation::
19712* Integers implementation::
19713* Floating point implementation::
19714* Arrays and pointers implementation::
19715* Hints implementation::
19716* Structures unions enumerations and bit-fields implementation::
19717* Qualifiers implementation::
19718* Declarators implementation::
19719* Statements implementation::
19720* Preprocessing directives implementation::
19721* Library functions implementation::
19722* Architecture implementation::
19723* Locale-specific behavior implementation::
19724
19725
19726File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
19727
197284.1 Translation
19729===============
19730
19731   * 'How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
19732     5.1.1.3).'
19733
19734     Diagnostics consist of all the output sent to stderr by GCC.
19735
19736   * 'Whether each nonempty sequence of white-space characters other
19737     than new-line is retained or replaced by one space character in
19738     translation phase 3 (C90 and C99 5.1.1.2).'
19739
19740     *Note Implementation-defined behavior: (cpp)Implementation-defined
19741     behavior.
19742
19743
19744File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
19745
197464.2 Environment
19747===============
19748
19749The behavior of most of these points are dependent on the implementation
19750of the C library, and are not defined by GCC itself.
19751
19752   * 'The mapping between physical source file multibyte characters and
19753     the source character set in translation phase 1 (C90 and C99
19754     5.1.1.2).'
19755
19756     *Note Implementation-defined behavior: (cpp)Implementation-defined
19757     behavior.
19758
19759
19760File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
19761
197624.3 Identifiers
19763===============
19764
19765   * 'Which additional multibyte characters may appear in identifiers
19766     and their correspondence to universal character names (C99 6.4.2).'
19767
19768     *Note Implementation-defined behavior: (cpp)Implementation-defined
19769     behavior.
19770
19771   * 'The number of significant initial characters in an identifier (C90
19772     6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
19773
19774     For internal names, all characters are significant.  For external
19775     names, the number of significant characters are defined by the
19776     linker; for almost all targets, all characters are significant.
19777
19778   * 'Whether case distinctions are significant in an identifier with
19779     external linkage (C90 6.1.2).'
19780
19781     This is a property of the linker.  C99 requires that case
19782     distinctions are always significant in identifiers with external
19783     linkage and systems without this property are not supported by GCC.
19784
19785
19786File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
19787
197884.4 Characters
19789==============
19790
19791   * 'The number of bits in a byte (C90 3.4, C99 3.6).'
19792
19793     Determined by ABI.
19794
19795   * 'The values of the members of the execution character set (C90 and
19796     C99 5.2.1).'
19797
19798     Determined by ABI.
19799
19800   * 'The unique value of the member of the execution character set
19801     produced for each of the standard alphabetic escape sequences (C90
19802     and C99 5.2.2).'
19803
19804     Determined by ABI.
19805
19806   * 'The value of a 'char' object into which has been stored any
19807     character other than a member of the basic execution character set
19808     (C90 6.1.2.5, C99 6.2.5).'
19809
19810     Determined by ABI.
19811
19812   * 'Which of 'signed char' or 'unsigned char' has the same range,
19813     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
19814     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
19815
19816     Determined by ABI.  The options '-funsigned-char' and
19817     '-fsigned-char' change the default.  *Note Options Controlling C
19818     Dialect: C Dialect Options.
19819
19820   * 'The mapping of members of the source character set (in character
19821     constants and string literals) to members of the execution
19822     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
19823
19824     Determined by ABI.
19825
19826   * 'The value of an integer character constant containing more than
19827     one character or containing a character or escape sequence that
19828     does not map to a single-byte execution character (C90 6.1.3.4, C99
19829     6.4.4.4).'
19830
19831     *Note Implementation-defined behavior: (cpp)Implementation-defined
19832     behavior.
19833
19834   * 'The value of a wide character constant containing more than one
19835     multibyte character, or containing a multibyte character or escape
19836     sequence not represented in the extended execution character set
19837     (C90 6.1.3.4, C99 6.4.4.4).'
19838
19839     *Note Implementation-defined behavior: (cpp)Implementation-defined
19840     behavior.
19841
19842   * 'The current locale used to convert a wide character constant
19843     consisting of a single multibyte character that maps to a member of
19844     the extended execution character set into a corresponding wide
19845     character code (C90 6.1.3.4, C99 6.4.4.4).'
19846
19847     *Note Implementation-defined behavior: (cpp)Implementation-defined
19848     behavior.
19849
19850   * 'The current locale used to convert a wide string literal into
19851     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
19852
19853     *Note Implementation-defined behavior: (cpp)Implementation-defined
19854     behavior.
19855
19856   * 'The value of a string literal containing a multibyte character or
19857     escape sequence not represented in the execution character set (C90
19858     6.1.4, C99 6.4.5).'
19859
19860     *Note Implementation-defined behavior: (cpp)Implementation-defined
19861     behavior.
19862
19863
19864File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
19865
198664.5 Integers
19867============
19868
19869   * 'Any extended integer types that exist in the implementation (C99
19870     6.2.5).'
19871
19872     GCC does not support any extended integer types.
19873
19874   * 'Whether signed integer types are represented using sign and
19875     magnitude, two's complement, or one's complement, and whether the
19876     extraordinary value is a trap representation or an ordinary value
19877     (C99 6.2.6.2).'
19878
19879     GCC supports only two's complement integer types, and all bit
19880     patterns are ordinary values.
19881
19882   * 'The rank of any extended integer type relative to another extended
19883     integer type with the same precision (C99 6.3.1.1).'
19884
19885     GCC does not support any extended integer types.
19886
19887   * 'The result of, or the signal raised by, converting an integer to a
19888     signed integer type when the value cannot be represented in an
19889     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
19890
19891     For conversion to a type of width N, the value is reduced modulo
19892     2^N to be within range of the type; no signal is raised.
19893
19894   * 'The results of some bitwise operations on signed integers (C90
19895     6.3, C99 6.5).'
19896
19897     Bitwise operators act on the representation of the value including
19898     both the sign and value bits, where the sign bit is considered
19899     immediately above the highest-value value bit.  Signed '>>' acts on
19900     negative numbers by sign extension.
19901
19902     GCC does not use the latitude given in C99 only to treat certain
19903     aspects of signed '<<' as undefined, but this is subject to change.
19904
19905   * 'The sign of the remainder on integer division (C90 6.3.5).'
19906
19907     GCC always follows the C99 requirement that the result of division
19908     is truncated towards zero.
19909
19910
19911File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
19912
199134.6 Floating point
19914==================
19915
19916   * 'The accuracy of the floating-point operations and of the library
19917     functions in '<math.h>' and '<complex.h>' that return
19918     floating-point results (C90 and C99 5.2.4.2.2).'
19919
19920     The accuracy is unknown.
19921
19922   * 'The rounding behaviors characterized by non-standard values of
19923     'FLT_ROUNDS' (C90 and C99 5.2.4.2.2).'
19924
19925     GCC does not use such values.
19926
19927   * 'The evaluation methods characterized by non-standard negative
19928     values of 'FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
19929
19930     GCC does not use such values.
19931
19932   * 'The direction of rounding when an integer is converted to a
19933     floating-point number that cannot exactly represent the original
19934     value (C90 6.2.1.3, C99 6.3.1.4).'
19935
19936     C99 Annex F is followed.
19937
19938   * 'The direction of rounding when a floating-point number is
19939     converted to a narrower floating-point number (C90 6.2.1.4, C99
19940     6.3.1.5).'
19941
19942     C99 Annex F is followed.
19943
19944   * 'How the nearest representable value or the larger or smaller
19945     representable value immediately adjacent to the nearest
19946     representable value is chosen for certain floating constants (C90
19947     6.1.3.1, C99 6.4.4.2).'
19948
19949     C99 Annex F is followed.
19950
19951   * 'Whether and how floating expressions are contracted when not
19952     disallowed by the 'FP_CONTRACT' pragma (C99 6.5).'
19953
19954     Expressions are currently only contracted if
19955     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
19956     subject to change.
19957
19958   * 'The default state for the 'FENV_ACCESS' pragma (C99 7.6.1).'
19959
19960     This pragma is not implemented, but the default is to "off" unless
19961     '-frounding-math' is used in which case it is "on".
19962
19963   * 'Additional floating-point exceptions, rounding modes,
19964     environments, and classifications, and their macro names (C99 7.6,
19965     C99 7.12).'
19966
19967     This is dependent on the implementation of the C library, and is
19968     not defined by GCC itself.
19969
19970   * 'The default state for the 'FP_CONTRACT' pragma (C99 7.12.2).'
19971
19972     This pragma is not implemented.  Expressions are currently only
19973     contracted if '-funsafe-math-optimizations' or '-ffast-math' are
19974     used.  This is subject to change.
19975
19976   * 'Whether the "inexact" floating-point exception can be raised when
19977     the rounded result actually does equal the mathematical result in
19978     an IEC 60559 conformant implementation (C99 F.9).'
19979
19980     This is dependent on the implementation of the C library, and is
19981     not defined by GCC itself.
19982
19983   * 'Whether the "underflow" (and "inexact") floating-point exception
19984     can be raised when a result is tiny but not inexact in an IEC 60559
19985     conformant implementation (C99 F.9).'
19986
19987     This is dependent on the implementation of the C library, and is
19988     not defined by GCC itself.
19989
19990
19991File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
19992
199934.7 Arrays and pointers
19994=======================
19995
19996   * 'The result of converting a pointer to an integer or vice versa
19997     (C90 6.3.4, C99 6.3.2.3).'
19998
19999     A cast from pointer to integer discards most-significant bits if
20000     the pointer representation is larger than the integer type,
20001     sign-extends(1) if the pointer representation is smaller than the
20002     integer type, otherwise the bits are unchanged.
20003
20004     A cast from integer to pointer discards most-significant bits if
20005     the pointer representation is smaller than the integer type,
20006     extends according to the signedness of the integer type if the
20007     pointer representation is larger than the integer type, otherwise
20008     the bits are unchanged.
20009
20010     When casting from pointer to integer and back again, the resulting
20011     pointer must reference the same object as the original pointer,
20012     otherwise the behavior is undefined.  That is, one may not use
20013     integer arithmetic to avoid the undefined behavior of pointer
20014     arithmetic as proscribed in C99 6.5.6/8.
20015
20016   * 'The size of the result of subtracting two pointers to elements of
20017     the same array (C90 6.3.6, C99 6.5.6).'
20018
20019     The value is as specified in the standard and the type is
20020     determined by the ABI.
20021
20022   ---------- Footnotes ----------
20023
20024   (1) Future versions of GCC may zero-extend, or use a target-defined
20025'ptr_extend' pattern.  Do not rely on sign extension.
20026
20027
20028File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
20029
200304.8 Hints
20031=========
20032
20033   * 'The extent to which suggestions made by using the 'register'
20034     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
20035
20036     The 'register' specifier affects code generation only in these
20037     ways:
20038
20039        * When used as part of the register variable extension, see
20040          *note Explicit Reg Vars::.
20041
20042        * When '-O0' is in use, the compiler allocates distinct stack
20043          memory for all variables that do not have the 'register'
20044          storage-class specifier; if 'register' is specified, the
20045          variable may have a shorter lifespan than the code would
20046          indicate and may never be placed in memory.
20047
20048        * On some rare x86 targets, 'setjmp' doesn't save the registers
20049          in all circumstances.  In those cases, GCC doesn't allocate
20050          any variables in registers unless they are marked 'register'.
20051
20052   * 'The extent to which suggestions made by using the inline function
20053     specifier are effective (C99 6.7.4).'
20054
20055     GCC will not inline any functions if the '-fno-inline' option is
20056     used or if '-O0' is used.  Otherwise, GCC may still be unable to
20057     inline a function for many reasons; the '-Winline' option may be
20058     used to determine if a function has not been inlined and why not.
20059
20060
20061File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
20062
200634.9 Structures, unions, enumerations, and bit-fields
20064====================================================
20065
20066   * 'A member of a union object is accessed using a member of a
20067     different type (C90 6.3.2.3).'
20068
20069     The relevant bytes of the representation of the object are treated
20070     as an object of the type used for the access.  *Note
20071     Type-punning::.  This may be a trap representation.
20072
20073   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
20074     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
20075     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
20076
20077     By default it is treated as 'signed int' but this may be changed by
20078     the '-funsigned-bitfields' option.
20079
20080   * 'Allowable bit-field types other than '_Bool', 'signed int', and
20081     'unsigned int' (C99 6.7.2.1).'
20082
20083     No other types are permitted in strictly conforming mode.
20084
20085   * 'Whether a bit-field can straddle a storage-unit boundary (C90
20086     6.5.2.1, C99 6.7.2.1).'
20087
20088     Determined by ABI.
20089
20090   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
20091     C99 6.7.2.1).'
20092
20093     Determined by ABI.
20094
20095   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
20096     C99 6.7.2.1).'
20097
20098     Determined by ABI.
20099
20100   * 'The integer type compatible with each enumerated type (C90
20101     6.5.2.2, C99 6.7.2.2).'
20102
20103     Normally, the type is 'unsigned int' if there are no negative
20104     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
20105     specified, then if there are negative values it is the first of
20106     'signed char', 'short' and 'int' that can represent all the values,
20107     otherwise it is the first of 'unsigned char', 'unsigned short' and
20108     'unsigned int' that can represent all the values.
20109
20110     On some targets, '-fshort-enums' is the default; this is determined
20111     by the ABI.
20112
20113
20114File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
20115
201164.10 Qualifiers
20117===============
20118
20119   * 'What constitutes an access to an object that has
20120     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
20121
20122     Such an object is normally accessed by pointers and used for
20123     accessing hardware.  In most expressions, it is intuitively obvious
20124     what is a read and what is a write.  For example
20125
20126          volatile int *dst = SOMEVALUE;
20127          volatile int *src = SOMEOTHERVALUE;
20128          *dst = *src;
20129
20130     will cause a read of the volatile object pointed to by SRC and
20131     store the value into the volatile object pointed to by DST.  There
20132     is no guarantee that these reads and writes are atomic, especially
20133     for objects larger than 'int'.
20134
20135     However, if the volatile storage is not being modified, and the
20136     value of the volatile storage is not used, then the situation is
20137     less obvious.  For example
20138
20139          volatile int *src = SOMEVALUE;
20140          *src;
20141
20142     According to the C standard, such an expression is an rvalue whose
20143     type is the unqualified version of its original type, i.e.  'int'.
20144     Whether GCC interprets this as a read of the volatile object being
20145     pointed to or only as a request to evaluate the expression for its
20146     side-effects depends on this type.
20147
20148     If it is a scalar type, or on most targets an aggregate type whose
20149     only member object is of a scalar type, or a union type whose
20150     member objects are of scalar types, the expression is interpreted
20151     by GCC as a read of the volatile object; in the other cases, the
20152     expression is only evaluated for its side-effects.
20153
20154
20155File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
20156
201574.11 Declarators
20158================
20159
20160   * 'The maximum number of declarators that may modify an arithmetic,
20161     structure or union type (C90 6.5.4).'
20162
20163     GCC is only limited by available memory.
20164
20165
20166File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
20167
201684.12 Statements
20169===============
20170
20171   * 'The maximum number of 'case' values in a 'switch' statement (C90
20172     6.6.4.2).'
20173
20174     GCC is only limited by available memory.
20175
20176
20177File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
20178
201794.13 Preprocessing directives
20180=============================
20181
20182*Note Implementation-defined behavior: (cpp)Implementation-defined
20183behavior, for details of these aspects of implementation-defined
20184behavior.
20185
20186   * 'How sequences in both forms of header names are mapped to headers
20187     or external source file names (C90 6.1.7, C99 6.4.7).'
20188
20189   * 'Whether the value of a character constant in a constant expression
20190     that controls conditional inclusion matches the value of the same
20191     character constant in the execution character set (C90 6.8.1, C99
20192     6.10.1).'
20193
20194   * 'Whether the value of a single-character character constant in a
20195     constant expression that controls conditional inclusion may have a
20196     negative value (C90 6.8.1, C99 6.10.1).'
20197
20198   * 'The places that are searched for an included '<>' delimited
20199     header, and how the places are specified or the header is
20200     identified (C90 6.8.2, C99 6.10.2).'
20201
20202   * 'How the named source file is searched for in an included '""'
20203     delimited header (C90 6.8.2, C99 6.10.2).'
20204
20205   * 'The method by which preprocessing tokens (possibly resulting from
20206     macro expansion) in a '#include' directive are combined into a
20207     header name (C90 6.8.2, C99 6.10.2).'
20208
20209   * 'The nesting limit for '#include' processing (C90 6.8.2, C99
20210     6.10.2).'
20211
20212   * 'Whether the '#' operator inserts a '\' character before the '\'
20213     character that begins a universal character name in a character
20214     constant or string literal (C99 6.10.3.2).'
20215
20216   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
20217     6.8.6, C99 6.10.6).'
20218
20219     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
20220     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
20221     details of target-specific pragmas.
20222
20223   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
20224     the date and time of translation are not available (C90 6.8.8, C99
20225     6.10.8).'
20226
20227
20228File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
20229
202304.14 Library functions
20231======================
20232
20233The behavior of most of these points are dependent on the implementation
20234of the C library, and are not defined by GCC itself.
20235
20236   * 'The null pointer constant to which the macro 'NULL' expands (C90
20237     7.1.6, C99 7.17).'
20238
20239     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
20240     provide the other headers which define 'NULL' and some library
20241     implementations may use other definitions in those headers.
20242
20243
20244File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
20245
202464.15 Architecture
20247=================
20248
20249   * 'The values or expressions assigned to the macros specified in the
20250     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90 and C99
20251     5.2.4.2, C99 7.18.2, C99 7.18.3).'
20252
20253     Determined by ABI.
20254
20255   * 'The number, order, and encoding of bytes in any object (when not
20256     explicitly specified in this International Standard) (C99
20257     6.2.6.1).'
20258
20259     Determined by ABI.
20260
20261   * 'The value of the result of the 'sizeof' operator (C90 6.3.3.4, C99
20262     6.5.3.4).'
20263
20264     Determined by ABI.
20265
20266
20267File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
20268
202694.16 Locale-specific behavior
20270=============================
20271
20272The behavior of these points are dependent on the implementation of the
20273C library, and are not defined by GCC itself.
20274
20275
20276File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
20277
202785 C++ Implementation-defined behavior
20279*************************************
20280
20281A conforming implementation of ISO C++ is required to document its
20282choice of behavior in each of the areas that are designated
20283"implementation defined".  The following lists all such areas, along
20284with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2028514882:2003 standards.  Some areas are only implementation-defined in one
20286version of the standard.
20287
20288 Some choices depend on the externally determined ABI for the platform
20289(including standard character encodings) which GCC follows; these are
20290listed as "determined by ABI" below.  *Note Binary Compatibility:
20291Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
20292documented in the preprocessor manual.  *Note Implementation-defined
20293behavior: (cpp)Implementation-defined behavior.  Some choices are
20294documented in the corresponding document for the C language.  *Note C
20295Implementation::.  Some choices are made by the library and operating
20296system (or other environment when compiling for a freestanding
20297environment); refer to their documentation for details.
20298
20299* Menu:
20300
20301* Conditionally-supported behavior::
20302* Exception handling::
20303
20304
20305File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
20306
203075.1 Conditionally-supported behavior
20308====================================
20309
20310'Each implementation shall include documentation that identifies all
20311conditionally-supported constructs that it does not support (C++0x
203121.4).'
20313
20314   * 'Whether an argument of class type with a non-trivial copy
20315     constructor or destructor can be passed to ... (C++0x 5.2.2).'
20316
20317     Such argument passing is not supported.
20318
20319
20320File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
20321
203225.2 Exception handling
20323======================
20324
20325   * 'In the situation where no matching handler is found, it is
20326     implementation-defined whether or not the stack is unwound before
20327     std::terminate() is called (C++98 15.5.1).'
20328
20329     The stack is not unwound before std::terminate is called.
20330
20331
20332File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
20333
203346 Extensions to the C Language Family
20335*************************************
20336
20337GNU C provides several language features not found in ISO standard C.
20338(The '-pedantic' option directs GCC to print a warning message if any of
20339these features is used.)  To test for the availability of these features
20340in conditional compilation, check for a predefined macro '__GNUC__',
20341which is always defined under GCC.
20342
20343 These extensions are available in C and Objective-C.  Most of them are
20344also available in C++.  *Note Extensions to the C++ Language: C++
20345Extensions, for extensions that apply _only_ to C++.
20346
20347 Some features that are in ISO C99 but not C90 or C++ are also, as
20348extensions, accepted by GCC in C90 mode and in C++.
20349
20350* Menu:
20351
20352* Statement Exprs::     Putting statements and declarations inside expressions.
20353* Local Labels::        Labels local to a block.
20354* Labels as Values::    Getting pointers to labels, and computed gotos.
20355* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
20356* Constructing Calls::  Dispatching a call to another function.
20357* Typeof::              'typeof': referring to the type of an expression.
20358* Conditionals::        Omitting the middle operand of a '?:' expression.
20359* __int128::			128-bit integers--'__int128'.
20360* Long Long::           Double-word integers--'long long int'.
20361* Complex::             Data types for complex numbers.
20362* Floating Types::      Additional Floating Types.
20363* Half-Precision::      Half-Precision Floating Point.
20364* Decimal Float::       Decimal Floating Types.
20365* Hex Floats::          Hexadecimal floating-point constants.
20366* Fixed-Point::         Fixed-Point Types.
20367* Named Address Spaces::Named address spaces.
20368* Zero Length::         Zero-length arrays.
20369* Empty Structures::    Structures with no members.
20370* Variable Length::     Arrays whose length is computed at run time.
20371* Variadic Macros::     Macros with a variable number of arguments.
20372* Escaped Newlines::    Slightly looser rules for escaped newlines.
20373* Subscripting::        Any array can be subscripted, even if not an lvalue.
20374* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
20375* Initializers::        Non-constant initializers.
20376* Compound Literals::   Compound literals give structures, unions
20377                        or arrays as values.
20378* Designated Inits::    Labeling elements of initializers.
20379* Case Ranges::         'case 1 ... 9' and such.
20380* Cast to Union::       Casting to union type from any member of the union.
20381* Mixed Declarations::  Mixing declarations and code.
20382* Function Attributes:: Declaring that functions have no side effects,
20383                        or that they can never return.
20384* Attribute Syntax::    Formal syntax for attributes.
20385* Function Prototypes:: Prototype declarations and old-style definitions.
20386* C++ Comments::        C++ comments are recognized.
20387* Dollar Signs::        Dollar sign is allowed in identifiers.
20388* Character Escapes::   '\e' stands for the character <ESC>.
20389* Variable Attributes:: Specifying attributes of variables.
20390* Type Attributes::     Specifying attributes of types.
20391* Alignment::           Inquiring about the alignment of a type or variable.
20392* Inline::              Defining inline functions (as fast as macros).
20393* Volatiles::           What constitutes an access to a volatile object.
20394* Extended Asm::        Assembler instructions with C expressions as operands.
20395                        (With them you can define "built-in" functions.)
20396* Constraints::         Constraints for asm operands
20397* Asm Labels::          Specifying the assembler name to use for a C symbol.
20398* Explicit Reg Vars::   Defining variables residing in specified registers.
20399* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
20400* Incomplete Enums::    'enum foo;', with details to follow.
20401* Function Names::      Printable strings which are the name of the current
20402                        function.
20403* Return Address::      Getting the return or frame address of a function.
20404* Vector Extensions::   Using vector instructions through built-in functions.
20405* Offsetof::            Special syntax for implementing 'offsetof'.
20406* __sync Builtins::     Legacy built-in functions for atomic memory access.
20407* __atomic Builtins::   Atomic built-in functions with memory model.
20408* x86 specific memory model extensions for transactional memory:: x86 memory models.
20409* Object Size Checking:: Built-in functions for limited buffer overflow
20410                        checking.
20411* Other Builtins::      Other built-in functions.
20412* Target Builtins::     Built-in functions specific to particular targets.
20413* Target Format Checks:: Format checks specific to particular targets.
20414* Pragmas::             Pragmas accepted by GCC.
20415* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
20416* Thread-Local::        Per-thread variables.
20417* Binary constants::    Binary constants using the '0b' prefix.
20418
20419
20420File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
20421
204226.1 Statements and Declarations in Expressions
20423==============================================
20424
20425A compound statement enclosed in parentheses may appear as an expression
20426in GNU C.  This allows you to use loops, switches, and local variables
20427within an expression.
20428
20429 Recall that a compound statement is a sequence of statements surrounded
20430by braces; in this construct, parentheses go around the braces.  For
20431example:
20432
20433     ({ int y = foo (); int z;
20434        if (y > 0) z = y;
20435        else z = - y;
20436        z; })
20437
20438is a valid (though slightly more complex than necessary) expression for
20439the absolute value of 'foo ()'.
20440
20441 The last thing in the compound statement should be an expression
20442followed by a semicolon; the value of this subexpression serves as the
20443value of the entire construct.  (If you use some other kind of statement
20444last within the braces, the construct has type 'void', and thus
20445effectively no value.)
20446
20447 This feature is especially useful in making macro definitions "safe"
20448(so that they evaluate each operand exactly once).  For example, the
20449"maximum" function is commonly defined as a macro in standard C as
20450follows:
20451
20452     #define max(a,b) ((a) > (b) ? (a) : (b))
20453
20454But this definition computes either A or B twice, with bad results if
20455the operand has side effects.  In GNU C, if you know the type of the
20456operands (here taken as 'int'), you can define the macro safely as
20457follows:
20458
20459     #define maxint(a,b) \
20460       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
20461
20462 Embedded statements are not allowed in constant expressions, such as
20463the value of an enumeration constant, the width of a bit-field, or the
20464initial value of a static variable.
20465
20466 If you don't know the type of the operand, you can still do this, but
20467you must use 'typeof' (*note Typeof::).
20468
20469 In G++, the result value of a statement expression undergoes array and
20470function pointer decay, and is returned by value to the enclosing
20471expression.  For instance, if 'A' is a class, then
20472
20473             A a;
20474
20475             ({a;}).Foo ()
20476
20477constructs a temporary 'A' object to hold the result of the statement
20478expression, and that is used to invoke 'Foo'.  Therefore the 'this'
20479pointer observed by 'Foo' is not the address of 'a'.
20480
20481 In a statement expression, any temporaries created within a statement
20482are destroyed at that statement's end.  This makes statement expressions
20483inside macros slightly different from function calls.  In the latter
20484case temporaries introduced during argument evaluation are destroyed at
20485the end of the statement that includes the function call.  In the
20486statement expression case they are destroyed during the statement
20487expression.  For instance,
20488
20489     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
20490     template<typename T> T function(T a) { T b = a; return b + 3; }
20491
20492     void foo ()
20493     {
20494       macro (X ());
20495       function (X ());
20496     }
20497
20498has different places where temporaries are destroyed.  For the 'macro'
20499case, the temporary 'X' is destroyed just after the initialization of
20500'b'.  In the 'function' case that temporary is destroyed when the
20501function returns.
20502
20503 These considerations mean that it is probably a bad idea to use
20504statement expressions of this form in header files that are designed to
20505work with C++.  (Note that some versions of the GNU C Library contained
20506header files using statement expressions that lead to precisely this
20507bug.)
20508
20509 Jumping into a statement expression with 'goto' or using a 'switch'
20510statement outside the statement expression with a 'case' or 'default'
20511label inside the statement expression is not permitted.  Jumping into a
20512statement expression with a computed 'goto' (*note Labels as Values::)
20513has undefined behavior.  Jumping out of a statement expression is
20514permitted, but if the statement expression is part of a larger
20515expression then it is unspecified which other subexpressions of that
20516expression have been evaluated except where the language definition
20517requires certain subexpressions to be evaluated before or after the
20518statement expression.  In any case, as with a function call, the
20519evaluation of a statement expression is not interleaved with the
20520evaluation of other parts of the containing expression.  For example,
20521
20522       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
20523
20524calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
20525'bar2'.  If 'bar2' is called, it is called after 'foo' and before
20526'bar1'.
20527
20528
20529File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
20530
205316.2 Locally Declared Labels
20532===========================
20533
20534GCC allows you to declare "local labels" in any nested block scope.  A
20535local label is just like an ordinary label, but you can only reference
20536it (with a 'goto' statement, or by taking its address) within the block
20537in which it is declared.
20538
20539 A local label declaration looks like this:
20540
20541     __label__ LABEL;
20542
20543or
20544
20545     __label__ LABEL1, LABEL2, /* ... */;
20546
20547 Local label declarations must come at the beginning of the block,
20548before any ordinary declarations or statements.
20549
20550 The label declaration defines the label _name_, but does not define the
20551label itself.  You must do this in the usual way, with 'LABEL:', within
20552the statements of the statement expression.
20553
20554 The local label feature is useful for complex macros.  If a macro
20555contains nested loops, a 'goto' can be useful for breaking out of them.
20556However, an ordinary label whose scope is the whole function cannot be
20557used: if the macro can be expanded several times in one function, the
20558label is multiply defined in that function.  A local label avoids this
20559problem.  For example:
20560
20561     #define SEARCH(value, array, target)              \
20562     do {                                              \
20563       __label__ found;                                \
20564       typeof (target) _SEARCH_target = (target);      \
20565       typeof (*(array)) *_SEARCH_array = (array);     \
20566       int i, j;                                       \
20567       int value;                                      \
20568       for (i = 0; i < max; i++)                       \
20569         for (j = 0; j < max; j++)                     \
20570           if (_SEARCH_array[i][j] == _SEARCH_target)  \
20571             { (value) = i; goto found; }              \
20572       (value) = -1;                                   \
20573      found:;                                          \
20574     } while (0)
20575
20576 This could also be written using a statement expression:
20577
20578     #define SEARCH(array, target)                     \
20579     ({                                                \
20580       __label__ found;                                \
20581       typeof (target) _SEARCH_target = (target);      \
20582       typeof (*(array)) *_SEARCH_array = (array);     \
20583       int i, j;                                       \
20584       int value;                                      \
20585       for (i = 0; i < max; i++)                       \
20586         for (j = 0; j < max; j++)                     \
20587           if (_SEARCH_array[i][j] == _SEARCH_target)  \
20588             { value = i; goto found; }                \
20589       value = -1;                                     \
20590      found:                                           \
20591       value;                                          \
20592     })
20593
20594 Local label declarations also make the labels they declare visible to
20595nested functions, if there are any.  *Note Nested Functions::, for
20596details.
20597
20598
20599File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
20600
206016.3 Labels as Values
20602====================
20603
20604You can get the address of a label defined in the current function (or a
20605containing function) with the unary operator '&&'.  The value has type
20606'void *'.  This value is a constant and can be used wherever a constant
20607of that type is valid.  For example:
20608
20609     void *ptr;
20610     /* ... */
20611     ptr = &&foo;
20612
20613 To use these values, you need to be able to jump to one.  This is done
20614with the computed goto statement(1), 'goto *EXP;'.  For example,
20615
20616     goto *ptr;
20617
20618Any expression of type 'void *' is allowed.
20619
20620 One way of using these constants is in initializing a static array that
20621serves as a jump table:
20622
20623     static void *array[] = { &&foo, &&bar, &&hack };
20624
20625Then you can select a label with indexing, like this:
20626
20627     goto *array[i];
20628
20629Note that this does not check whether the subscript is in bounds--array
20630indexing in C never does that.
20631
20632 Such an array of label values serves a purpose much like that of the
20633'switch' statement.  The 'switch' statement is cleaner, so use that
20634rather than an array unless the problem does not fit a 'switch'
20635statement very well.
20636
20637 Another use of label values is in an interpreter for threaded code.
20638The labels within the interpreter function can be stored in the threaded
20639code for super-fast dispatching.
20640
20641 You may not use this mechanism to jump to code in a different function.
20642If you do that, totally unpredictable things happen.  The best way to
20643avoid this is to store the label address only in automatic variables and
20644never pass it as an argument.
20645
20646 An alternate way to write the above example is
20647
20648     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
20649                                  &&hack - &&foo };
20650     goto *(&&foo + array[i]);
20651
20652This is more friendly to code living in shared libraries, as it reduces
20653the number of dynamic relocations that are needed, and by consequence,
20654allows the data to be read-only.
20655
20656 The '&&foo' expressions for the same label might have different values
20657if the containing function is inlined or cloned.  If a program relies on
20658them being always the same, '__attribute__((__noinline__,__noclone__))'
20659should be used to prevent inlining and cloning.  If '&&foo' is used in a
20660static variable initializer, inlining and cloning is forbidden.
20661
20662   ---------- Footnotes ----------
20663
20664   (1) The analogous feature in Fortran is called an assigned goto, but
20665that name seems inappropriate in C, where one can do more than simply
20666store label addresses in label variables.
20667
20668
20669File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
20670
206716.4 Nested Functions
20672====================
20673
20674A "nested function" is a function defined inside another function.
20675Nested functions are supported as an extension in GNU C, but are not
20676supported by GNU C++.
20677
20678 The nested function's name is local to the block where it is defined.
20679For example, here we define a nested function named 'square', and call
20680it twice:
20681
20682     foo (double a, double b)
20683     {
20684       double square (double z) { return z * z; }
20685
20686       return square (a) + square (b);
20687     }
20688
20689 The nested function can access all the variables of the containing
20690function that are visible at the point of its definition.  This is
20691called "lexical scoping".  For example, here we show a nested function
20692which uses an inherited variable named 'offset':
20693
20694     bar (int *array, int offset, int size)
20695     {
20696       int access (int *array, int index)
20697         { return array[index + offset]; }
20698       int i;
20699       /* ... */
20700       for (i = 0; i < size; i++)
20701         /* ... */ access (array, i) /* ... */
20702     }
20703
20704 Nested function definitions are permitted within functions in the
20705places where variable definitions are allowed; that is, in any block,
20706mixed with the other declarations and statements in the block.
20707
20708 It is possible to call the nested function from outside the scope of
20709its name by storing its address or passing the address to another
20710function:
20711
20712     hack (int *array, int size)
20713     {
20714       void store (int index, int value)
20715         { array[index] = value; }
20716
20717       intermediate (store, size);
20718     }
20719
20720 Here, the function 'intermediate' receives the address of 'store' as an
20721argument.  If 'intermediate' calls 'store', the arguments given to
20722'store' are used to store into 'array'.  But this technique works only
20723so long as the containing function ('hack', in this example) does not
20724exit.
20725
20726 If you try to call the nested function through its address after the
20727containing function exits, all hell breaks loose.  If you try to call it
20728after a containing scope level exits, and if it refers to some of the
20729variables that are no longer in scope, you may be lucky, but it's not
20730wise to take the risk.  If, however, the nested function does not refer
20731to anything that has gone out of scope, you should be safe.
20732
20733 GCC implements taking the address of a nested function using a
20734technique called "trampolines".  This technique was described in
20735'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
20736Proceedings, October 17-21, 1988).
20737
20738 A nested function can jump to a label inherited from a containing
20739function, provided the label is explicitly declared in the containing
20740function (*note Local Labels::).  Such a jump returns instantly to the
20741containing function, exiting the nested function that did the 'goto' and
20742any intermediate functions as well.  Here is an example:
20743
20744     bar (int *array, int offset, int size)
20745     {
20746       __label__ failure;
20747       int access (int *array, int index)
20748         {
20749           if (index > size)
20750             goto failure;
20751           return array[index + offset];
20752         }
20753       int i;
20754       /* ... */
20755       for (i = 0; i < size; i++)
20756         /* ... */ access (array, i) /* ... */
20757       /* ... */
20758       return 0;
20759
20760      /* Control comes here from 'access'
20761         if it detects an error.  */
20762      failure:
20763       return -1;
20764     }
20765
20766 A nested function always has no linkage.  Declaring one with 'extern'
20767or 'static' is erroneous.  If you need to declare the nested function
20768before its definition, use 'auto' (which is otherwise meaningless for
20769function declarations).
20770
20771     bar (int *array, int offset, int size)
20772     {
20773       __label__ failure;
20774       auto int access (int *, int);
20775       /* ... */
20776       int access (int *array, int index)
20777         {
20778           if (index > size)
20779             goto failure;
20780           return array[index + offset];
20781         }
20782       /* ... */
20783     }
20784
20785
20786File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
20787
207886.5 Constructing Function Calls
20789===============================
20790
20791Using the built-in functions described below, you can record the
20792arguments a function received, and call another function with the same
20793arguments, without knowing the number or types of the arguments.
20794
20795 You can also record the return value of that function call, and later
20796return that value, without knowing what data type the function tried to
20797return (as long as your caller expects that data type).
20798
20799 However, these built-in functions may interact badly with some
20800sophisticated features or other extensions of the language.  It is,
20801therefore, not recommended to use them outside very simple functions
20802acting as mere forwarders for their arguments.
20803
20804 -- Built-in Function: void * __builtin_apply_args ()
20805     This built-in function returns a pointer to data describing how to
20806     perform a call with the same arguments as are passed to the current
20807     function.
20808
20809     The function saves the arg pointer register, structure value
20810     address, and all registers that might be used to pass arguments to
20811     a function into a block of memory allocated on the stack.  Then it
20812     returns the address of that block.
20813
20814 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
20815          *ARGUMENTS, size_t SIZE)
20816     This built-in function invokes FUNCTION with a copy of the
20817     parameters described by ARGUMENTS and SIZE.
20818
20819     The value of ARGUMENTS should be the value returned by
20820     '__builtin_apply_args'.  The argument SIZE specifies the size of
20821     the stack argument data, in bytes.
20822
20823     This function returns a pointer to data describing how to return
20824     whatever value is returned by FUNCTION.  The data is saved in a
20825     block of memory allocated on the stack.
20826
20827     It is not always simple to compute the proper value for SIZE.  The
20828     value is used by '__builtin_apply' to compute the amount of data
20829     that should be pushed on the stack and copied from the incoming
20830     argument area.
20831
20832 -- Built-in Function: void __builtin_return (void *RESULT)
20833     This built-in function returns the value described by RESULT from
20834     the containing function.  You should specify, for RESULT, a value
20835     returned by '__builtin_apply'.
20836
20837 -- Built-in Function: __builtin_va_arg_pack ()
20838     This built-in function represents all anonymous arguments of an
20839     inline function.  It can be used only in inline functions that are
20840     always inlined, never compiled as a separate function, such as
20841     those using '__attribute__ ((__always_inline__))' or '__attribute__
20842     ((__gnu_inline__))' extern inline functions.  It must be only
20843     passed as last argument to some other function with variable
20844     arguments.  This is useful for writing small wrapper inlines for
20845     variable argument functions, when using preprocessor macros is
20846     undesirable.  For example:
20847          extern int myprintf (FILE *f, const char *format, ...);
20848          extern inline __attribute__ ((__gnu_inline__)) int
20849          myprintf (FILE *f, const char *format, ...)
20850          {
20851            int r = fprintf (f, "myprintf: ");
20852            if (r < 0)
20853              return r;
20854            int s = fprintf (f, format, __builtin_va_arg_pack ());
20855            if (s < 0)
20856              return s;
20857            return r + s;
20858          }
20859
20860 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
20861     This built-in function returns the number of anonymous arguments of
20862     an inline function.  It can be used only in inline functions that
20863     are always inlined, never compiled as a separate function, such as
20864     those using '__attribute__ ((__always_inline__))' or '__attribute__
20865     ((__gnu_inline__))' extern inline functions.  For example following
20866     does link- or run-time checking of open arguments for optimized
20867     code:
20868          #ifdef __OPTIMIZE__
20869          extern inline __attribute__((__gnu_inline__)) int
20870          myopen (const char *path, int oflag, ...)
20871          {
20872            if (__builtin_va_arg_pack_len () > 1)
20873              warn_open_too_many_arguments ();
20874
20875            if (__builtin_constant_p (oflag))
20876              {
20877                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
20878                  {
20879                    warn_open_missing_mode ();
20880                    return __open_2 (path, oflag);
20881                  }
20882                return open (path, oflag, __builtin_va_arg_pack ());
20883              }
20884
20885            if (__builtin_va_arg_pack_len () < 1)
20886              return __open_2 (path, oflag);
20887
20888            return open (path, oflag, __builtin_va_arg_pack ());
20889          }
20890          #endif
20891
20892
20893File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
20894
208956.6 Referring to a Type with 'typeof'
20896=====================================
20897
20898Another way to refer to the type of an expression is with 'typeof'.  The
20899syntax of using of this keyword looks like 'sizeof', but the construct
20900acts semantically like a type name defined with 'typedef'.
20901
20902 There are two ways of writing the argument to 'typeof': with an
20903expression or with a type.  Here is an example with an expression:
20904
20905     typeof (x[0](1))
20906
20907This assumes that 'x' is an array of pointers to functions; the type
20908described is that of the values of the functions.
20909
20910 Here is an example with a typename as the argument:
20911
20912     typeof (int *)
20913
20914Here the type described is that of pointers to 'int'.
20915
20916 If you are writing a header file that must work when included in ISO C
20917programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
20918Keywords::.
20919
20920 A 'typeof' construct can be used anywhere a typedef name can be used.
20921For example, you can use it in a declaration, in a cast, or inside of
20922'sizeof' or 'typeof'.
20923
20924 The operand of 'typeof' is evaluated for its side effects if and only
20925if it is an expression of variably modified type or the name of such a
20926type.
20927
20928 'typeof' is often useful in conjunction with statement expressions
20929(*note Statement Exprs::).  Here is how the two together can be used to
20930define a safe "maximum" macro which operates on any arithmetic type and
20931evaluates each of its arguments exactly once:
20932
20933     #define max(a,b) \
20934       ({ typeof (a) _a = (a); \
20935           typeof (b) _b = (b); \
20936         _a > _b ? _a : _b; })
20937
20938 The reason for using names that start with underscores for the local
20939variables is to avoid conflicts with variable names that occur within
20940the expressions that are substituted for 'a' and 'b'.  Eventually we
20941hope to design a new form of declaration syntax that allows you to
20942declare variables whose scopes start only after their initializers; this
20943will be a more reliable way to prevent such conflicts.
20944
20945Some more examples of the use of 'typeof':
20946
20947   * This declares 'y' with the type of what 'x' points to.
20948
20949          typeof (*x) y;
20950
20951   * This declares 'y' as an array of such values.
20952
20953          typeof (*x) y[4];
20954
20955   * This declares 'y' as an array of pointers to characters:
20956
20957          typeof (typeof (char *)[4]) y;
20958
20959     It is equivalent to the following traditional C declaration:
20960
20961          char *y[4];
20962
20963     To see the meaning of the declaration using 'typeof', and why it
20964     might be a useful way to write, rewrite it with these macros:
20965
20966          #define pointer(T)  typeof(T *)
20967          #define array(T, N) typeof(T [N])
20968
20969     Now the declaration can be rewritten this way:
20970
20971          array (pointer (char), 4) y;
20972
20973     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
20974     pointers to 'char'.
20975
20976 _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more
20977limited extension that permitted one to write
20978
20979     typedef T = EXPR;
20980
20981with the effect of declaring T to have the type of the expression EXPR.
20982This extension does not work with GCC 3 (versions between 3.0 and 3.2
20983crash; 3.2.1 and later give an error).  Code that relies on it should be
20984rewritten to use 'typeof':
20985
20986     typedef typeof(EXPR) T;
20987
20988This works with all versions of GCC.
20989
20990
20991File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
20992
209936.7 Conditionals with Omitted Operands
20994======================================
20995
20996The middle operand in a conditional expression may be omitted.  Then if
20997the first operand is nonzero, its value is the value of the conditional
20998expression.
20999
21000 Therefore, the expression
21001
21002     x ? : y
21003
21004has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
21005
21006 This example is perfectly equivalent to
21007
21008     x ? x : y
21009
21010In this simple case, the ability to omit the middle operand is not
21011especially useful.  When it becomes useful is when the first operand
21012does, or may (if it is a macro argument), contain a side effect.  Then
21013repeating the operand in the middle would perform the side effect twice.
21014Omitting the middle operand uses the value already computed without the
21015undesirable effects of recomputing it.
21016
21017
21018File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
21019
210206.8 128-bit integers
21021====================
21022
21023As an extension the integer scalar type '__int128' is supported for
21024targets which have an integer mode wide enough to hold 128 bits.  Simply
21025write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
21026for an unsigned 128-bit integer.  There is no support in GCC for
21027expressing an integer constant of type '__int128' for targets with 'long
21028long' integer less than 128 bits wide.
21029
21030
21031File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
21032
210336.9 Double-Word Integers
21034========================
21035
21036ISO C99 supports data types for integers that are at least 64 bits wide,
21037and as an extension GCC supports them in C90 mode and in C++.  Simply
21038write 'long long int' for a signed integer, or 'unsigned long long int'
21039for an unsigned integer.  To make an integer constant of type 'long long
21040int', add the suffix 'LL' to the integer.  To make an integer constant
21041of type 'unsigned long long int', add the suffix 'ULL' to the integer.
21042
21043 You can use these types in arithmetic like any other integer types.
21044Addition, subtraction, and bitwise boolean operations on these types are
21045open-coded on all types of machines.  Multiplication is open-coded if
21046the machine supports a fullword-to-doubleword widening multiply
21047instruction.  Division and shifts are open-coded only on machines that
21048provide special support.  The operations that are not open-coded use
21049special library routines that come with GCC.
21050
21051 There may be pitfalls when you use 'long long' types for function
21052arguments without function prototypes.  If a function expects type 'int'
21053for its argument, and you pass a value of type 'long long int',
21054confusion results because the caller and the subroutine disagree about
21055the number of bytes for the argument.  Likewise, if the function expects
21056'long long int' and you pass 'int'.  The best way to avoid such problems
21057is to use prototypes.
21058
21059
21060File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
21061
210626.10 Complex Numbers
21063====================
21064
21065ISO C99 supports complex floating data types, and as an extension GCC
21066supports them in C90 mode and in C++.  GCC also supports complex integer
21067data types which are not part of ISO C99.  You can declare complex types
21068using the keyword '_Complex'.  As an extension, the older GNU keyword
21069'__complex__' is also supported.
21070
21071 For example, '_Complex double x;' declares 'x' as a variable whose real
21072part and imaginary part are both of type 'double'.  '_Complex short int
21073y;' declares 'y' to have real and imaginary parts of type 'short int';
21074this is not likely to be useful, but it shows that the set of complex
21075types is complete.
21076
21077 To write a constant with a complex data type, use the suffix 'i' or 'j'
21078(either one; they are equivalent).  For example, '2.5fi' has type
21079'_Complex float' and '3i' has type '_Complex int'.  Such a constant
21080always has a pure imaginary value, but you can form any complex value
21081you like by adding one to a real constant.  This is a GNU extension; if
21082you have an ISO C99 conforming C library (such as the GNU C Library),
21083and want to construct complex constants of floating type, you should
21084include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
21085
21086 To extract the real part of a complex-valued expression EXP, write
21087'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
21088This is a GNU extension; for values of floating type, you should use the
21089ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
21090'cimagl', declared in '<complex.h>' and also provided as built-in
21091functions by GCC.
21092
21093 The operator '~' performs complex conjugation when used on a value with
21094a complex type.  This is a GNU extension; for values of floating type,
21095you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
21096declared in '<complex.h>' and also provided as built-in functions by
21097GCC.
21098
21099 GCC can allocate complex automatic variables in a noncontiguous
21100fashion; it's even possible for the real part to be in a register while
21101the imaginary part is on the stack (or vice versa).  Only the DWARF 2
21102debug info format can represent this, so use of DWARF 2 is recommended.
21103If you are using the stabs debug info format, GCC describes a
21104noncontiguous complex variable as if it were two separate variables of
21105noncomplex type.  If the variable's actual name is 'foo', the two
21106fictitious variables are named 'foo$real' and 'foo$imag'.  You can
21107examine and set these two fictitious variables with your debugger.
21108
21109
21110File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
21111
211126.11 Additional Floating Types
21113==============================
21114
21115As an extension, GNU C supports additional floating types, '__float80'
21116and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode')
21117floating types.  Support for additional types includes the arithmetic
21118operators: add, subtract, multiply, divide; unary arithmetic operators;
21119relational operators; equality operators; and conversions to and from
21120integer and other floating types.  Use a suffix 'w' or 'W' in a literal
21121constant of type '__float80' and 'q' or 'Q' for '_float128'.  You can
21122declare complex types using the corresponding internal complex type,
21123'XCmode' for '__float80' type and 'TCmode' for '__float128' type:
21124
21125     typedef _Complex float __attribute__((mode(TC))) _Complex128;
21126     typedef _Complex float __attribute__((mode(XC))) _Complex80;
21127
21128 Not all targets support additional floating-point types.  '__float80'
21129and '__float128' types are supported on i386, x86_64 and IA-64 targets.
21130The '__float128' type is supported on hppa HP-UX targets.
21131
21132
21133File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
21134
211356.12 Half-Precision Floating Point
21136==================================
21137
21138On ARM targets, GCC supports half-precision (16-bit) floating point via
21139the '__fp16' type.  You must enable this type explicitly with the
21140'-mfp16-format' command-line option in order to use it.
21141
21142 ARM supports two incompatible representations for half-precision
21143floating-point values.  You must choose one of the representations and
21144use it consistently in your program.
21145
21146 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
21147format can represent normalized values in the range of 2^{-14} to 65504.
21148There are 11 bits of significand precision, approximately 3 decimal
21149digits.
21150
21151 Specifying '-mfp16-format=alternative' selects the ARM alternative
21152format.  This representation is similar to the IEEE format, but does not
21153support infinities or NaNs.  Instead, the range of exponents is
21154extended, so that this format can represent normalized values in the
21155range of 2^{-14} to 131008.
21156
21157 The '__fp16' type is a storage format only.  For purposes of arithmetic
21158and other operations, '__fp16' values in C or C++ expressions are
21159automatically promoted to 'float'.  In addition, you cannot declare a
21160function with a return value or parameters of type '__fp16'.
21161
21162 Note that conversions from 'double' to '__fp16' involve an intermediate
21163conversion to 'float'.  Because of rounding, this can sometimes produce
21164a different result than a direct conversion.
21165
21166 ARM provides hardware support for conversions between '__fp16' and
21167'float' values as an extension to VFP and NEON (Advanced SIMD). GCC
21168generates code using these hardware instructions if you compile with
21169options to select an FPU that provides them; for example,
21170'-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format'
21171option to select a half-precision format.
21172
21173 Language-level support for the '__fp16' data type is independent of
21174whether GCC generates code using hardware floating-point instructions.
21175In cases where hardware support is not specified, GCC implements
21176conversions between '__fp16' and 'float' values as library calls.
21177
21178
21179File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
21180
211816.13 Decimal Floating Types
21182===========================
21183
21184As an extension, GNU C supports decimal floating types as defined in the
21185N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
21186GCC will evolve as the draft technical report changes.  Calling
21187conventions for any target might also change.  Not all targets support
21188decimal floating types.
21189
21190 The decimal floating types are '_Decimal32', '_Decimal64', and
21191'_Decimal128'.  They use a radix of ten, unlike the floating types
21192'float', 'double', and 'long double' whose radix is not specified by the
21193C standard but is usually two.
21194
21195 Support for decimal floating types includes the arithmetic operators
21196add, subtract, multiply, divide; unary arithmetic operators; relational
21197operators; equality operators; and conversions to and from integer and
21198other floating types.  Use a suffix 'df' or 'DF' in a literal constant
21199of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
21200for '_Decimal128'.
21201
21202 GCC support of decimal float as specified by the draft technical report
21203is incomplete:
21204
21205   * When the value of a decimal floating type cannot be represented in
21206     the integer type to which it is being converted, the result is
21207     undefined rather than the result value specified by the draft
21208     technical report.
21209
21210   * GCC does not provide the C library functionality associated with
21211     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
21212     must come from a separate C library implementation.  Because of
21213     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
21214     indicate that the implementation conforms to the technical report.
21215
21216 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
21217the DWARF 2 debug information format.
21218
21219
21220File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
21221
212226.14 Hex Floats
21223===============
21224
21225ISO C99 supports floating-point numbers written not only in the usual
21226decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3'
21227written in hexadecimal format.  As a GNU extension, GCC supports this in
21228C90 mode (except in some cases when strictly conforming) and in C++.  In
21229that format the '0x' hex introducer and the 'p' or 'P' exponent field
21230are mandatory.  The exponent is a decimal number that indicates the
21231power of 2 by which the significant part is multiplied.  Thus '0x1.f' is
212321 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same
21233as '1.55e1'.
21234
21235 Unlike for floating-point numbers in the decimal notation the exponent
21236is always required in the hexadecimal notation.  Otherwise the compiler
21237would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
21238could mean '1.0f' or '1.9375' since 'f' is also the extension for
21239floating-point constants of type 'float'.
21240
21241
21242File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
21243
212446.15 Fixed-Point Types
21245======================
21246
21247As an extension, GNU C supports fixed-point types as defined in the
21248N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
21249will evolve as the draft technical report changes.  Calling conventions
21250for any target might also change.  Not all targets support fixed-point
21251types.
21252
21253 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
21254'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
21255'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
21256_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
21257'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
21258long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
21259'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
21260'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
21261'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
21262_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
21263unsigned long _Accum', '_Sat unsigned long long _Accum'.
21264
21265 Fixed-point data values contain fractional and optional integral parts.
21266The format of fixed-point data varies and depends on the target machine.
21267
21268 Support for fixed-point types includes:
21269   * prefix and postfix increment and decrement operators ('++', '--')
21270   * unary arithmetic operators ('+', '-', '!')
21271   * binary arithmetic operators ('+', '-', '*', '/')
21272   * binary shift operators ('<<', '>>')
21273   * relational operators ('<', '<=', '>=', '>')
21274   * equality operators ('==', '!=')
21275   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
21276   * conversions to and from integer, floating-point, or fixed-point
21277     types
21278
21279 Use a suffix in a fixed-point literal constant:
21280   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
21281   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
21282   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
21283   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
21284   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
21285     _Fract'
21286   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
21287   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
21288     _Fract'
21289   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
21290     long long _Fract'
21291   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
21292   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
21293   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
21294   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
21295   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
21296     _Accum'
21297   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
21298   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
21299     _Accum'
21300   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
21301     long long _Accum'
21302
21303 GCC support of fixed-point types as specified by the draft technical
21304report is incomplete:
21305
21306   * Pragmas to control overflow and rounding behaviors are not
21307     implemented.
21308
21309 Fixed-point types are supported by the DWARF 2 debug information
21310format.
21311
21312
21313File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
21314
213156.16 Named Address Spaces
21316=========================
21317
21318As an extension, GNU C supports named address spaces as defined in the
21319N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
21320GCC will evolve as the draft technical report changes.  Calling
21321conventions for any target might also change.  At present, only the AVR,
21322SPU, M32C, and RL78 targets support address spaces other than the
21323generic address space.
21324
21325 Address space identifiers may be used exactly like any other C type
21326qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
21327more details.
21328
213296.16.1 AVR Named Address Spaces
21330-------------------------------
21331
21332On the AVR target, there are several address spaces that can be used in
21333order to put read-only data into the flash memory and access that data
21334by means of the special instructions 'LPM' or 'ELPM' needed to read from
21335flash.
21336
21337 Per default, any data including read-only data is located in RAM (the
21338generic address space) so that non-generic address spaces are needed to
21339locate read-only data in flash memory _and_ to generate the right
21340instructions to access this data without using (inline) assembler code.
21341
21342'__flash'
21343     The '__flash' qualifier locates data in the '.progmem.data'
21344     section.  Data is read using the 'LPM' instruction.  Pointers to
21345     this address space are 16 bits wide.
21346
21347'__flash1'
21348'__flash2'
21349'__flash3'
21350'__flash4'
21351'__flash5'
21352     These are 16-bit address spaces locating data in section
21353     '.progmemN.data' where N refers to address space '__flashN'.  The
21354     compiler sets the 'RAMPZ' segment register appropriately before
21355     reading data by means of the 'ELPM' instruction.
21356
21357'__memx'
21358     This is a 24-bit address space that linearizes flash and RAM: If
21359     the high bit of the address is set, data is read from RAM using the
21360     lower two bytes as RAM address.  If the high bit of the address is
21361     clear, data is read from flash with 'RAMPZ' set according to the
21362     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
21363     Built-in Functions.
21364
21365     Objects in this address space are located in '.progmemx.data'.
21366
21367 Example
21368
21369     char my_read (const __flash char ** p)
21370     {
21371         /* p is a pointer to RAM that points to a pointer to flash.
21372            The first indirection of p reads that flash pointer
21373            from RAM and the second indirection reads a char from this
21374            flash address.  */
21375
21376         return **p;
21377     }
21378
21379     /* Locate array[] in flash memory */
21380     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
21381
21382     int i = 1;
21383
21384     int main (void)
21385     {
21386        /* Return 17 by reading from flash memory */
21387        return array[array[i]];
21388     }
21389
21390For each named address space supported by avr-gcc there is an equally
21391named but uppercase built-in macro defined.  The purpose is to
21392facilitate testing if respective address space support is available or
21393not:
21394
21395     #ifdef __FLASH
21396     const __flash int var = 1;
21397
21398     int read_var (void)
21399     {
21400         return var;
21401     }
21402     #else
21403     #include <avr/pgmspace.h> /* From AVR-LibC */
21404
21405     const int var PROGMEM = 1;
21406
21407     int read_var (void)
21408     {
21409         return (int) pgm_read_word (&var);
21410     }
21411     #endif /* __FLASH */
21412
21413Notice that attribute *note 'progmem': AVR Variable Attributes. locates
21414data in flash but accesses to these data read from generic address
21415space, i.e. from RAM, so that you need special accessors like
21416'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
21417together with attribute 'progmem'.
21418
21419Limitations and caveats
21420
21421   * Reading across the 64 KiB section boundary of the '__flash' or
21422     '__flashN' address spaces shows undefined behavior.  The only
21423     address space that supports reading across the 64 KiB flash segment
21424     boundaries is '__memx'.
21425
21426   * If you use one of the '__flashN' address spaces you must arrange
21427     your linker script to locate the '.progmemN.data' sections
21428     according to your needs.
21429
21430   * Any data or pointers to the non-generic address spaces must be
21431     qualified as 'const', i.e. as read-only data.  This still applies
21432     if the data in one of these address spaces like software version
21433     number or calibration lookup table are intended to be changed after
21434     load time by, say, a boot loader.  In this case the right
21435     qualification is 'const' 'volatile' so that the compiler must not
21436     optimize away known values or insert them as immediates into
21437     operands of instructions.
21438
21439   * The following code initializes a variable 'pfoo' located in static
21440     storage with a 24-bit address:
21441          extern const __memx char foo;
21442          const __memx void *pfoo = &foo;
21443
21444     Such code requires at least binutils 2.23, see
21445     PR13503 (http://sourceware.org/PR13503).
21446
214476.16.2 M32C Named Address Spaces
21448--------------------------------
21449
21450On the M32C target, with the R8C and M16C CPU variants, variables
21451qualified with '__far' are accessed using 32-bit addresses in order to
21452access memory beyond the first 64 Ki bytes.  If '__far' is used with the
21453M32CM or M32C CPU variants, it has no effect.
21454
214556.16.3 RL78 Named Address Spaces
21456--------------------------------
21457
21458On the RL78 target, variables qualified with '__far' are accessed with
2145932-bit pointers (20-bit addresses) rather than the default 16-bit
21460addresses.  Non-far variables are assumed to appear in the topmost
2146164 KiB of the address space.
21462
214636.16.4 SPU Named Address Spaces
21464-------------------------------
21465
21466On the SPU target variables may be declared as belonging to another
21467address space by qualifying the type with the '__ea' address space
21468identifier:
21469
21470     extern int __ea i;
21471
21472The compiler generates special code to access the variable 'i'.  It may
21473use runtime library support, or generate special machine instructions to
21474access that address space.
21475
21476
21477File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
21478
214796.17 Arrays of Length Zero
21480==========================
21481
21482Zero-length arrays are allowed in GNU C.  They are very useful as the
21483last element of a structure that is really a header for a
21484variable-length object:
21485
21486     struct line {
21487       int length;
21488       char contents[0];
21489     };
21490
21491     struct line *thisline = (struct line *)
21492       malloc (sizeof (struct line) + this_length);
21493     thisline->length = this_length;
21494
21495 In ISO C90, you would have to give 'contents' a length of 1, which
21496means either you waste space or complicate the argument to 'malloc'.
21497
21498 In ISO C99, you would use a "flexible array member", which is slightly
21499different in syntax and semantics:
21500
21501   * Flexible array members are written as 'contents[]' without the '0'.
21502
21503   * Flexible array members have incomplete type, and so the 'sizeof'
21504     operator may not be applied.  As a quirk of the original
21505     implementation of zero-length arrays, 'sizeof' evaluates to zero.
21506
21507   * Flexible array members may only appear as the last member of a
21508     'struct' that is otherwise non-empty.
21509
21510   * A structure containing a flexible array member, or a union
21511     containing such a structure (possibly recursively), may not be a
21512     member of a structure or an element of an array.  (However, these
21513     uses are permitted by GCC as extensions.)
21514
21515 GCC versions before 3.0 allowed zero-length arrays to be statically
21516initialized, as if they were flexible arrays.  In addition to those
21517cases that were useful, it also allowed initializations in situations
21518that would corrupt later data.  Non-empty initialization of zero-length
21519arrays is now treated like any case where there are more initializer
21520elements than the array holds, in that a suitable warning about "excess
21521elements in array" is given, and the excess elements (all of them, in
21522this case) are ignored.
21523
21524 Instead GCC allows static initialization of flexible array members.
21525This is equivalent to defining a new structure containing the original
21526structure followed by an array of sufficient size to contain the data.
21527E.g. in the following, 'f1' is constructed as if it were declared like
21528'f2'.
21529
21530     struct f1 {
21531       int x; int y[];
21532     } f1 = { 1, { 2, 3, 4 } };
21533
21534     struct f2 {
21535       struct f1 f1; int data[3];
21536     } f2 = { { 1 }, { 2, 3, 4 } };
21537
21538The convenience of this extension is that 'f1' has the desired type,
21539eliminating the need to consistently refer to 'f2.f1'.
21540
21541 This has symmetry with normal static arrays, in that an array of
21542unknown size is also written with '[]'.
21543
21544 Of course, this extension only makes sense if the extra data comes at
21545the end of a top-level object, as otherwise we would be overwriting data
21546at subsequent offsets.  To avoid undue complication and confusion with
21547initialization of deeply nested arrays, we simply disallow any non-empty
21548initialization except when the structure is the top-level object.  For
21549example:
21550
21551     struct foo { int x; int y[]; };
21552     struct bar { struct foo z; };
21553
21554     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
21555     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
21556     struct bar c = { { 1, { } } };            // Valid.
21557     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
21558
21559
21560File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
21561
215626.18 Structures With No Members
21563===============================
21564
21565GCC permits a C structure to have no members:
21566
21567     struct empty {
21568     };
21569
21570 The structure has size zero.  In C++, empty structures are part of the
21571language.  G++ treats empty structures as if they had a single member of
21572type 'char'.
21573
21574
21575File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
21576
215776.19 Arrays of Variable Length
21578==============================
21579
21580Variable-length automatic arrays are allowed in ISO C99, and as an
21581extension GCC accepts them in C90 mode and in C++.  These arrays are
21582declared like any other automatic arrays, but with a length that is not
21583a constant expression.  The storage is allocated at the point of
21584declaration and deallocated when the block scope containing the
21585declaration exits.  For example:
21586
21587     FILE *
21588     concat_fopen (char *s1, char *s2, char *mode)
21589     {
21590       char str[strlen (s1) + strlen (s2) + 1];
21591       strcpy (str, s1);
21592       strcat (str, s2);
21593       return fopen (str, mode);
21594     }
21595
21596 Jumping or breaking out of the scope of the array name deallocates the
21597storage.  Jumping into the scope is not allowed; you get an error
21598message for it.
21599
21600 You can use the function 'alloca' to get an effect much like
21601variable-length arrays.  The function 'alloca' is available in many
21602other C implementations (but not in all).  On the other hand,
21603variable-length arrays are more elegant.
21604
21605 There are other differences between these two methods.  Space allocated
21606with 'alloca' exists until the containing _function_ returns.  The space
21607for a variable-length array is deallocated as soon as the array name's
21608scope ends.  (If you use both variable-length arrays and 'alloca' in the
21609same function, deallocation of a variable-length array also deallocates
21610anything more recently allocated with 'alloca'.)
21611
21612 You can also use variable-length arrays as arguments to functions:
21613
21614     struct entry
21615     tester (int len, char data[len][len])
21616     {
21617       /* ... */
21618     }
21619
21620 The length of an array is computed once when the storage is allocated
21621and is remembered for the scope of the array in case you access it with
21622'sizeof'.
21623
21624 If you want to pass the array first and the length afterward, you can
21625use a forward declaration in the parameter list--another GNU extension.
21626
21627     struct entry
21628     tester (int len; char data[len][len], int len)
21629     {
21630       /* ... */
21631     }
21632
21633 The 'int len' before the semicolon is a "parameter forward
21634declaration", and it serves the purpose of making the name 'len' known
21635when the declaration of 'data' is parsed.
21636
21637 You can write any number of such parameter forward declarations in the
21638parameter list.  They can be separated by commas or semicolons, but the
21639last one must end with a semicolon, which is followed by the "real"
21640parameter declarations.  Each forward declaration must match a "real"
21641declaration in parameter name and data type.  ISO C99 does not support
21642parameter forward declarations.
21643
21644
21645File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
21646
216476.20 Macros with a Variable Number of Arguments.
21648================================================
21649
21650In the ISO C standard of 1999, a macro can be declared to accept a
21651variable number of arguments much as a function can.  The syntax for
21652defining the macro is similar to that of a function.  Here is an
21653example:
21654
21655     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
21656
21657Here '...' is a "variable argument".  In the invocation of such a macro,
21658it represents the zero or more tokens until the closing parenthesis that
21659ends the invocation, including any commas.  This set of tokens replaces
21660the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
21661the CPP manual for more information.
21662
21663 GCC has long supported variadic macros, and used a different syntax
21664that allowed you to give a name to the variable arguments just like any
21665other argument.  Here is an example:
21666
21667     #define debug(format, args...) fprintf (stderr, format, args)
21668
21669This is in all ways equivalent to the ISO C example above, but arguably
21670more readable and descriptive.
21671
21672 GNU CPP has two further variadic macro extensions, and permits them to
21673be used with either of the above forms of macro definition.
21674
21675 In standard C, you are not allowed to leave the variable argument out
21676entirely; but you are allowed to pass an empty argument.  For example,
21677this invocation is invalid in ISO C, because there is no comma after the
21678string:
21679
21680     debug ("A message")
21681
21682 GNU CPP permits you to completely omit the variable arguments in this
21683way.  In the above examples, the compiler would complain, though since
21684the expansion of the macro still has the extra comma after the format
21685string.
21686
21687 To help solve this problem, CPP behaves specially for variable
21688arguments used with the token paste operator, '##'.  If instead you
21689write
21690
21691     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
21692
21693and if the variable arguments are omitted or empty, the '##' operator
21694causes the preprocessor to remove the comma before it.  If you do
21695provide some variable arguments in your macro invocation, GNU CPP does
21696not complain about the paste operation and instead places the variable
21697arguments after the comma.  Just like any other pasted macro argument,
21698these arguments are not macro expanded.
21699
21700
21701File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
21702
217036.21 Slightly Looser Rules for Escaped Newlines
21704===============================================
21705
21706Recently, the preprocessor has relaxed its treatment of escaped
21707newlines.  Previously, the newline had to immediately follow a
21708backslash.  The current implementation allows whitespace in the form of
21709spaces, horizontal and vertical tabs, and form feeds between the
21710backslash and the subsequent newline.  The preprocessor issues a
21711warning, but treats it as a valid escaped newline and combines the two
21712lines to form a single logical line.  This works within comments and
21713tokens, as well as between tokens.  Comments are _not_ treated as
21714whitespace for the purposes of this relaxation, since they have not yet
21715been replaced with spaces.
21716
21717
21718File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
21719
217206.22 Non-Lvalue Arrays May Have Subscripts
21721==========================================
21722
21723In ISO C99, arrays that are not lvalues still decay to pointers, and may
21724be subscripted, although they may not be modified or used after the next
21725sequence point and the unary '&' operator may not be applied to them.
21726As an extension, GNU C allows such arrays to be subscripted in C90 mode,
21727though otherwise they do not decay to pointers outside C99 mode.  For
21728example, this is valid in GNU C though not valid in C90:
21729
21730     struct foo {int a[4];};
21731
21732     struct foo f();
21733
21734     bar (int index)
21735     {
21736       return f().a[index];
21737     }
21738
21739
21740File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
21741
217426.23 Arithmetic on 'void'- and Function-Pointers
21743================================================
21744
21745In GNU C, addition and subtraction operations are supported on pointers
21746to 'void' and on pointers to functions.  This is done by treating the
21747size of a 'void' or of a function as 1.
21748
21749 A consequence of this is that 'sizeof' is also allowed on 'void' and on
21750function types, and returns 1.
21751
21752 The option '-Wpointer-arith' requests a warning if these extensions are
21753used.
21754
21755
21756File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
21757
217586.24 Non-Constant Initializers
21759==============================
21760
21761As in standard C++ and ISO C99, the elements of an aggregate initializer
21762for an automatic variable are not required to be constant expressions in
21763GNU C.  Here is an example of an initializer with run-time varying
21764elements:
21765
21766     foo (float f, float g)
21767     {
21768       float beat_freqs[2] = { f-g, f+g };
21769       /* ... */
21770     }
21771
21772
21773File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
21774
217756.25 Compound Literals
21776======================
21777
21778ISO C99 supports compound literals.  A compound literal looks like a
21779cast containing an initializer.  Its value is an object of the type
21780specified in the cast, containing the elements specified in the
21781initializer; it is an lvalue.  As an extension, GCC supports compound
21782literals in C90 mode and in C++, though the semantics are somewhat
21783different in C++.
21784
21785 Usually, the specified type is a structure.  Assume that 'struct foo'
21786and 'structure' are declared as shown:
21787
21788     struct foo {int a; char b[2];} structure;
21789
21790Here is an example of constructing a 'struct foo' with a compound
21791literal:
21792
21793     structure = ((struct foo) {x + y, 'a', 0});
21794
21795This is equivalent to writing the following:
21796
21797     {
21798       struct foo temp = {x + y, 'a', 0};
21799       structure = temp;
21800     }
21801
21802 You can also construct an array, though this is dangerous in C++, as
21803explained below.  If all the elements of the compound literal are (made
21804up of) simple constant expressions, suitable for use in initializers of
21805objects of static storage duration, then the compound literal can be
21806coerced to a pointer to its first element and used in such an
21807initializer, as shown here:
21808
21809     char **foo = (char *[]) { "x", "y", "z" };
21810
21811 Compound literals for scalar types and union types are also allowed,
21812but then the compound literal is equivalent to a cast.
21813
21814 As a GNU extension, GCC allows initialization of objects with static
21815storage duration by compound literals (which is not possible in ISO C99,
21816because the initializer is not a constant).  It is handled as if the
21817object is initialized only with the bracket enclosed list if the types
21818of the compound literal and the object match.  The initializer list of
21819the compound literal must be constant.  If the object being initialized
21820has array type of unknown size, the size is determined by compound
21821literal size.
21822
21823     static struct foo x = (struct foo) {1, 'a', 'b'};
21824     static int y[] = (int []) {1, 2, 3};
21825     static int z[] = (int [3]) {1};
21826
21827The above lines are equivalent to the following:
21828     static struct foo x = {1, 'a', 'b'};
21829     static int y[] = {1, 2, 3};
21830     static int z[] = {1, 0, 0};
21831
21832 In C, a compound literal designates an unnamed object with static or
21833automatic storage duration.  In C++, a compound literal designates a
21834temporary object, which only lives until the end of its full-expression.
21835As a result, well-defined C code that takes the address of a subobject
21836of a compound literal can be undefined in C++.  For instance, if the
21837array compound literal example above appeared inside a function, any
21838subsequent use of 'foo' in C++ has undefined behavior because the
21839lifetime of the array ends after the declaration of 'foo'.  As a result,
21840the C++ compiler now rejects the conversion of a temporary array to a
21841pointer.
21842
21843 As an optimization, the C++ compiler sometimes gives array compound
21844literals longer lifetimes: when the array either appears outside a
21845function or has const-qualified type.  If 'foo' and its initializer had
21846elements of 'char *const' type rather than 'char *', or if 'foo' were a
21847global variable, the array would have static storage duration.  But it
21848is probably safest just to avoid the use of array compound literals in
21849code compiled as C++.
21850
21851
21852File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
21853
218546.26 Designated Initializers
21855============================
21856
21857Standard C90 requires the elements of an initializer to appear in a
21858fixed order, the same as the order of the elements in the array or
21859structure being initialized.
21860
21861 In ISO C99 you can give the elements in any order, specifying the array
21862indices or structure field names they apply to, and GNU C allows this as
21863an extension in C90 mode as well.  This extension is not implemented in
21864GNU C++.
21865
21866 To specify an array index, write '[INDEX] =' before the element value.
21867For example,
21868
21869     int a[6] = { [4] = 29, [2] = 15 };
21870
21871is equivalent to
21872
21873     int a[6] = { 0, 0, 15, 0, 29, 0 };
21874
21875The index values must be constant expressions, even if the array being
21876initialized is automatic.
21877
21878 An alternative syntax for this that has been obsolete since GCC 2.5 but
21879GCC still accepts is to write '[INDEX]' before the element value, with
21880no '='.
21881
21882 To initialize a range of elements to the same value, write '[FIRST ...
21883LAST] = VALUE'.  This is a GNU extension.  For example,
21884
21885     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
21886
21887If the value in it has side-effects, the side-effects happen only once,
21888not for each initialized field by the range initializer.
21889
21890Note that the length of the array is the highest value specified plus
21891one.
21892
21893 In a structure initializer, specify the name of a field to initialize
21894with '.FIELDNAME =' before the element value.  For example, given the
21895following structure,
21896
21897     struct point { int x, y; };
21898
21899the following initialization
21900
21901     struct point p = { .y = yvalue, .x = xvalue };
21902
21903is equivalent to
21904
21905     struct point p = { xvalue, yvalue };
21906
21907 Another syntax that has the same meaning, obsolete since GCC 2.5, is
21908'FIELDNAME:', as shown here:
21909
21910     struct point p = { y: yvalue, x: xvalue };
21911
21912 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
21913use a designator (or the obsolete colon syntax) when initializing a
21914union, to specify which element of the union should be used.  For
21915example,
21916
21917     union foo { int i; double d; };
21918
21919     union foo f = { .d = 4 };
21920
21921converts 4 to a 'double' to store it in the union using the second
21922element.  By contrast, casting 4 to type 'union foo' stores it into the
21923union as the integer 'i', since it is an integer.  (*Note Cast to
21924Union::.)
21925
21926 You can combine this technique of naming elements with ordinary C
21927initialization of successive elements.  Each initializer element that
21928does not have a designator applies to the next consecutive element of
21929the array or structure.  For example,
21930
21931     int a[6] = { [1] = v1, v2, [4] = v4 };
21932
21933is equivalent to
21934
21935     int a[6] = { 0, v1, v2, 0, v4, 0 };
21936
21937 Labeling the elements of an array initializer is especially useful when
21938the indices are characters or belong to an 'enum' type.  For example:
21939
21940     int whitespace[256]
21941       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
21942           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
21943
21944 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
21945before an '=' to specify a nested subobject to initialize; the list is
21946taken relative to the subobject corresponding to the closest surrounding
21947brace pair.  For example, with the 'struct point' declaration above:
21948
21949     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
21950
21951If the same field is initialized multiple times, it has the value from
21952the last initialization.  If any such overridden initialization has
21953side-effect, it is unspecified whether the side-effect happens or not.
21954Currently, GCC discards them and issues a warning.
21955
21956
21957File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
21958
219596.27 Case Ranges
21960================
21961
21962You can specify a range of consecutive values in a single 'case' label,
21963like this:
21964
21965     case LOW ... HIGH:
21966
21967This has the same effect as the proper number of individual 'case'
21968labels, one for each integer value from LOW to HIGH, inclusive.
21969
21970 This feature is especially useful for ranges of ASCII character codes:
21971
21972     case 'A' ... 'Z':
21973
21974 *Be careful:* Write spaces around the '...', for otherwise it may be
21975parsed wrong when you use it with integer values.  For example, write
21976this:
21977
21978     case 1 ... 5:
21979
21980rather than this:
21981
21982     case 1...5:
21983
21984
21985File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
21986
219876.28 Cast to a Union Type
21988=========================
21989
21990A cast to union type is similar to other casts, except that the type
21991specified is a union type.  You can specify the type either with 'union
21992TAG' or with a typedef name.  A cast to union is actually a constructor,
21993not a cast, and hence does not yield an lvalue like normal casts.
21994(*Note Compound Literals::.)
21995
21996 The types that may be cast to the union type are those of the members
21997of the union.  Thus, given the following union and variables:
21998
21999     union foo { int i; double d; };
22000     int x;
22001     double y;
22002
22003both 'x' and 'y' can be cast to type 'union foo'.
22004
22005 Using the cast as the right-hand side of an assignment to a variable of
22006union type is equivalent to storing in a member of the union:
22007
22008     union foo u;
22009     /* ... */
22010     u = (union foo) x  ==  u.i = x
22011     u = (union foo) y  ==  u.d = y
22012
22013 You can also use the union cast as a function argument:
22014
22015     void hack (union foo);
22016     /* ... */
22017     hack ((union foo) x);
22018
22019
22020File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
22021
220226.29 Mixed Declarations and Code
22023================================
22024
22025ISO C99 and ISO C++ allow declarations and code to be freely mixed
22026within compound statements.  As an extension, GNU C also allows this in
22027C90 mode.  For example, you could do:
22028
22029     int i;
22030     /* ... */
22031     i++;
22032     int j = i + 2;
22033
22034 Each identifier is visible from where it is declared until the end of
22035the enclosing block.
22036
22037
22038File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
22039
220406.30 Declaring Attributes of Functions
22041======================================
22042
22043In GNU C, you declare certain things about functions called in your
22044program which help the compiler optimize function calls and check your
22045code more carefully.
22046
22047 The keyword '__attribute__' allows you to specify special attributes
22048when making a declaration.  This keyword is followed by an attribute
22049specification inside double parentheses.  The following attributes are
22050currently defined for functions on all targets: 'aligned', 'alloc_size',
22051'noreturn', 'returns_twice', 'noinline', 'noclone', 'always_inline',
22052'flatten', 'pure', 'const', 'nothrow', 'sentinel', 'format',
22053'format_arg', 'no_instrument_function', 'no_split_stack', 'section',
22054'constructor', 'destructor', 'used', 'unused', 'deprecated', 'weak',
22055'malloc', 'alias', 'ifunc', 'warn_unused_result', 'nonnull',
22056'gnu_inline', 'externally_visible', 'hot', 'cold', 'artificial',
22057'no_sanitize_address', 'no_address_safety_analysis', 'error' and
22058'warning'.  Several other attributes are defined for functions on
22059particular target systems.  Other attributes, including 'section' are
22060supported for variables declarations (*note Variable Attributes::) and
22061for types (*note Type Attributes::).
22062
22063 GCC plugins may provide their own attributes.
22064
22065 You may also specify attributes with '__' preceding and following each
22066keyword.  This allows you to use them in header files without being
22067concerned about a possible macro of the same name.  For example, you may
22068use '__noreturn__' instead of 'noreturn'.
22069
22070 *Note Attribute Syntax::, for details of the exact syntax for using
22071attributes.
22072
22073'alias ("TARGET")'
22074     The 'alias' attribute causes the declaration to be emitted as an
22075     alias for another symbol, which must be specified.  For instance,
22076
22077          void __f () { /* Do something. */; }
22078          void f () __attribute__ ((weak, alias ("__f")));
22079
22080     defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
22081     for the target must be used.  It is an error if '__f' is not
22082     defined in the same translation unit.
22083
22084     Not all target machines support this attribute.
22085
22086'aligned (ALIGNMENT)'
22087     This attribute specifies a minimum alignment for the function,
22088     measured in bytes.
22089
22090     You cannot use this attribute to decrease the alignment of a
22091     function, only to increase it.  However, when you explicitly
22092     specify a function alignment this overrides the effect of the
22093     '-falign-functions' (*note Optimize Options::) option for this
22094     function.
22095
22096     Note that the effectiveness of 'aligned' attributes may be limited
22097     by inherent limitations in your linker.  On many systems, the
22098     linker is only able to arrange for functions to be aligned up to a
22099     certain maximum alignment.  (For some linkers, the maximum
22100     supported alignment may be very very small.)  See your linker
22101     documentation for further information.
22102
22103     The 'aligned' attribute can also be used for variables and fields
22104     (*note Variable Attributes::.)
22105
22106'alloc_size'
22107     The 'alloc_size' attribute is used to tell the compiler that the
22108     function return value points to memory, where the size is given by
22109     one or two of the functions parameters.  GCC uses this information
22110     to improve the correctness of '__builtin_object_size'.
22111
22112     The function parameter(s) denoting the allocated size are specified
22113     by one or two integer arguments supplied to the attribute.  The
22114     allocated size is either the value of the single function argument
22115     specified or the product of the two function arguments specified.
22116     Argument numbering starts at one.
22117
22118     For instance,
22119
22120          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
22121          void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
22122
22123     declares that 'my_calloc' returns memory of the size given by the
22124     product of parameter 1 and 2 and that 'my_realloc' returns memory
22125     of the size given by parameter 2.
22126
22127'always_inline'
22128     Generally, functions are not inlined unless optimization is
22129     specified.  For functions declared inline, this attribute inlines
22130     the function even if no optimization level is specified.
22131
22132'gnu_inline'
22133     This attribute should be used with a function that is also declared
22134     with the 'inline' keyword.  It directs GCC to treat the function as
22135     if it were defined in gnu90 mode even when compiling in C99 or
22136     gnu99 mode.
22137
22138     If the function is declared 'extern', then this definition of the
22139     function is used only for inlining.  In no case is the function
22140     compiled as a standalone function, not even if you take its address
22141     explicitly.  Such an address becomes an external reference, as if
22142     you had only declared the function, and had not defined it.  This
22143     has almost the effect of a macro.  The way to use this is to put a
22144     function definition in a header file with this attribute, and put
22145     another copy of the function, without 'extern', in a library file.
22146     The definition in the header file causes most calls to the function
22147     to be inlined.  If any uses of the function remain, they refer to
22148     the single copy in the library.  Note that the two definitions of
22149     the functions need not be precisely the same, although if they do
22150     not have the same effect your program may behave oddly.
22151
22152     In C, if the function is neither 'extern' nor 'static', then the
22153     function is compiled as a standalone function, as well as being
22154     inlined where possible.
22155
22156     This is how GCC traditionally handled functions declared 'inline'.
22157     Since ISO C99 specifies a different semantics for 'inline', this
22158     function attribute is provided as a transition measure and as a
22159     useful feature in its own right.  This attribute is available in
22160     GCC 4.1.3 and later.  It is available if either of the preprocessor
22161     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
22162     *Note An Inline Function is As Fast As a Macro: Inline.
22163
22164     In C++, this attribute does not depend on 'extern' in any way, but
22165     it still requires the 'inline' keyword to enable its special
22166     behavior.
22167
22168'artificial'
22169     This attribute is useful for small inline wrappers that if possible
22170     should appear during debugging as a unit.  Depending on the debug
22171     info format it either means marking the function as artificial or
22172     using the caller location for all instructions within the inlined
22173     body.
22174
22175'bank_switch'
22176     When added to an interrupt handler with the M32C port, causes the
22177     prologue and epilogue to use bank switching to preserve the
22178     registers rather than saving them on the stack.
22179
22180'flatten'
22181     Generally, inlining into a function is limited.  For a function
22182     marked with this attribute, every call inside this function is
22183     inlined, if possible.  Whether the function itself is considered
22184     for inlining depends on its size and the current inlining
22185     parameters.
22186
22187'error ("MESSAGE")'
22188     If this attribute is used on a function declaration and a call to
22189     such a function is not eliminated through dead code elimination or
22190     other optimizations, an error that includes MESSAGE is diagnosed.
22191     This is useful for compile-time checking, especially together with
22192     '__builtin_constant_p' and inline functions where checking the
22193     inline function arguments is not possible through 'extern char
22194     [(condition) ? 1 : -1];' tricks.  While it is possible to leave the
22195     function undefined and thus invoke a link failure, when using this
22196     attribute the problem is diagnosed earlier and with exact location
22197     of the call even in presence of inline functions or when not
22198     emitting debugging information.
22199
22200'warning ("MESSAGE")'
22201     If this attribute is used on a function declaration and a call to
22202     such a function is not eliminated through dead code elimination or
22203     other optimizations, a warning that includes MESSAGE is diagnosed.
22204     This is useful for compile-time checking, especially together with
22205     '__builtin_constant_p' and inline functions.  While it is possible
22206     to define the function with a message in '.gnu.warning*' section,
22207     when using this attribute the problem is diagnosed earlier and with
22208     exact location of the call even in presence of inline functions or
22209     when not emitting debugging information.
22210
22211'cdecl'
22212     On the Intel 386, the 'cdecl' attribute causes the compiler to
22213     assume that the calling function pops off the stack space used to
22214     pass arguments.  This is useful to override the effects of the
22215     '-mrtd' switch.
22216
22217'const'
22218     Many functions do not examine any values except their arguments,
22219     and have no effects except the return value.  Basically this is
22220     just slightly more strict class than the 'pure' attribute below,
22221     since function is not allowed to read global memory.
22222
22223     Note that a function that has pointer arguments and examines the
22224     data pointed to must _not_ be declared 'const'.  Likewise, a
22225     function that calls a non-'const' function usually must not be
22226     'const'.  It does not make sense for a 'const' function to return
22227     'void'.
22228
22229     The attribute 'const' is not implemented in GCC versions earlier
22230     than 2.5.  An alternative way to declare that a function has no
22231     side effects, which works in the current version and in some older
22232     versions, is as follows:
22233
22234          typedef int intfn ();
22235
22236          extern const intfn square;
22237
22238     This approach does not work in GNU C++ from 2.6.0 on, since the
22239     language specifies that the 'const' must be attached to the return
22240     value.
22241
22242'constructor'
22243'destructor'
22244'constructor (PRIORITY)'
22245'destructor (PRIORITY)'
22246     The 'constructor' attribute causes the function to be called
22247     automatically before execution enters 'main ()'.  Similarly, the
22248     'destructor' attribute causes the function to be called
22249     automatically after 'main ()' completes or 'exit ()' is called.
22250     Functions with these attributes are useful for initializing data
22251     that is used implicitly during the execution of the program.
22252
22253     You may provide an optional integer priority to control the order
22254     in which constructor and destructor functions are run.  A
22255     constructor with a smaller priority number runs before a
22256     constructor with a larger priority number; the opposite
22257     relationship holds for destructors.  So, if you have a constructor
22258     that allocates a resource and a destructor that deallocates the
22259     same resource, both functions typically have the same priority.
22260     The priorities for constructor and destructor functions are the
22261     same as those specified for namespace-scope C++ objects (*note C++
22262     Attributes::).
22263
22264     These attributes are not currently implemented for Objective-C.
22265
22266'deprecated'
22267'deprecated (MSG)'
22268     The 'deprecated' attribute results in a warning if the function is
22269     used anywhere in the source file.  This is useful when identifying
22270     functions that are expected to be removed in a future version of a
22271     program.  The warning also includes the location of the declaration
22272     of the deprecated function, to enable users to easily find further
22273     information about why the function is deprecated, or what they
22274     should do instead.  Note that the warnings only occurs for uses:
22275
22276          int old_fn () __attribute__ ((deprecated));
22277          int old_fn ();
22278          int (*fn_ptr)() = old_fn;
22279
22280     results in a warning on line 3 but not line 2.  The optional MSG
22281     argument, which must be a string, is printed in the warning if
22282     present.
22283
22284     The 'deprecated' attribute can also be used for variables and types
22285     (*note Variable Attributes::, *note Type Attributes::.)
22286
22287'disinterrupt'
22288     On Epiphany and MeP targets, this attribute causes the compiler to
22289     emit instructions to disable interrupts for the duration of the
22290     given function.
22291
22292'dllexport'
22293     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
22294     attribute causes the compiler to provide a global pointer to a
22295     pointer in a DLL, so that it can be referenced with the 'dllimport'
22296     attribute.  On Microsoft Windows targets, the pointer name is
22297     formed by combining '_imp__' and the function or variable name.
22298
22299     You can use '__declspec(dllexport)' as a synonym for '__attribute__
22300     ((dllexport))' for compatibility with other compilers.
22301
22302     On systems that support the 'visibility' attribute, this attribute
22303     also implies "default" visibility.  It is an error to explicitly
22304     specify any other visibility.
22305
22306     In previous versions of GCC, the 'dllexport' attribute was ignored
22307     for inlined functions, unless the '-fkeep-inline-functions' flag
22308     had been used.  The default behavior now is to emit all dllexported
22309     inline functions; however, this can cause object file-size bloat,
22310     in which case the old behavior can be restored by using
22311     '-fno-keep-inline-dllexport'.
22312
22313     The attribute is also ignored for undefined symbols.
22314
22315     When applied to C++ classes, the attribute marks defined
22316     non-inlined member functions and static data members as exports.
22317     Static consts initialized in-class are not marked unless they are
22318     also defined out-of-class.
22319
22320     For Microsoft Windows targets there are alternative methods for
22321     including the symbol in the DLL's export table such as using a
22322     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
22323     '--export-all' linker flag.
22324
22325'dllimport'
22326     On Microsoft Windows and Symbian OS targets, the 'dllimport'
22327     attribute causes the compiler to reference a function or variable
22328     via a global pointer to a pointer that is set up by the DLL
22329     exporting the symbol.  The attribute implies 'extern'.  On
22330     Microsoft Windows targets, the pointer name is formed by combining
22331     '_imp__' and the function or variable name.
22332
22333     You can use '__declspec(dllimport)' as a synonym for '__attribute__
22334     ((dllimport))' for compatibility with other compilers.
22335
22336     On systems that support the 'visibility' attribute, this attribute
22337     also implies "default" visibility.  It is an error to explicitly
22338     specify any other visibility.
22339
22340     Currently, the attribute is ignored for inlined functions.  If the
22341     attribute is applied to a symbol _definition_, an error is
22342     reported.  If a symbol previously declared 'dllimport' is later
22343     defined, the attribute is ignored in subsequent references, and a
22344     warning is emitted.  The attribute is also overridden by a
22345     subsequent declaration as 'dllexport'.
22346
22347     When applied to C++ classes, the attribute marks non-inlined member
22348     functions and static data members as imports.  However, the
22349     attribute is ignored for virtual methods to allow creation of
22350     vtables using thunks.
22351
22352     On the SH Symbian OS target the 'dllimport' attribute also has
22353     another affect--it can cause the vtable and run-time type
22354     information for a class to be exported.  This happens when the
22355     class has a dllimported constructor or a non-inline, non-pure
22356     virtual function and, for either of those two conditions, the class
22357     also has an inline constructor or destructor and has a key function
22358     that is defined in the current translation unit.
22359
22360     For Microsoft Windows targets the use of the 'dllimport' attribute
22361     on functions is not necessary, but provides a small performance
22362     benefit by eliminating a thunk in the DLL.  The use of the
22363     'dllimport' attribute on imported variables was required on older
22364     versions of the GNU linker, but can now be avoided by passing the
22365     '--enable-auto-import' switch to the GNU linker.  As with
22366     functions, using the attribute for a variable eliminates a thunk in
22367     the DLL.
22368
22369     One drawback to using this attribute is that a pointer to a
22370     _variable_ marked as 'dllimport' cannot be used as a constant
22371     address.  However, a pointer to a _function_ with the 'dllimport'
22372     attribute can be used as a constant initializer; in this case, the
22373     address of a stub function in the import lib is referenced.  On
22374     Microsoft Windows targets, the attribute can be disabled for
22375     functions by setting the '-mnop-fun-dllimport' flag.
22376
22377'eightbit_data'
22378     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
22379     the specified variable should be placed into the eight-bit data
22380     section.  The compiler generates more efficient code for certain
22381     operations on data in the eight-bit data area.  Note the eight-bit
22382     data area is limited to 256 bytes of data.
22383
22384     You must use GAS and GLD from GNU binutils version 2.7 or later for
22385     this attribute to work correctly.
22386
22387'exception_handler'
22388     Use this attribute on the Blackfin to indicate that the specified
22389     function is an exception handler.  The compiler generates function
22390     entry and exit sequences suitable for use in an exception handler
22391     when this attribute is present.
22392
22393'externally_visible'
22394     This attribute, attached to a global variable or function,
22395     nullifies the effect of the '-fwhole-program' command-line option,
22396     so the object remains visible outside the current compilation unit.
22397
22398     If '-fwhole-program' is used together with '-flto' and 'gold' is
22399     used as the linker plugin, 'externally_visible' attributes are
22400     automatically added to functions (not variable yet due to a current
22401     'gold' issue) that are accessed outside of LTO objects according to
22402     resolution file produced by 'gold'.  For other linkers that cannot
22403     generate resolution file, explicit 'externally_visible' attributes
22404     are still necessary.
22405
22406'far'
22407     On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use
22408     a calling convention that takes care of switching memory banks when
22409     entering and leaving a function.  This calling convention is also
22410     the default when using the '-mlong-calls' option.
22411
22412     On 68HC12 the compiler uses the 'call' and 'rtc' instructions to
22413     call and return from a function.
22414
22415     On 68HC11 the compiler generates a sequence of instructions to
22416     invoke a board-specific routine to switch the memory bank and call
22417     the real function.  The board-specific routine simulates a 'call'.
22418     At the end of a function, it jumps to a board-specific routine
22419     instead of using 'rts'.  The board-specific return routine
22420     simulates the 'rtc'.
22421
22422     On MeP targets this causes the compiler to use a calling convention
22423     that assumes the called function is too far away for the built-in
22424     addressing modes.
22425
22426'fast_interrupt'
22427     Use this attribute on the M32C and RX ports to indicate that the
22428     specified function is a fast interrupt handler.  This is just like
22429     the 'interrupt' attribute, except that 'freit' is used to return
22430     instead of 'reit'.
22431
22432'fastcall'
22433     On the Intel 386, the 'fastcall' attribute causes the compiler to
22434     pass the first argument (if of integral type) in the register ECX
22435     and the second argument (if of integral type) in the register EDX.
22436     Subsequent and other typed arguments are passed on the stack.  The
22437     called function pops the arguments off the stack.  If the number of
22438     arguments is variable all arguments are pushed on the stack.
22439
22440'thiscall'
22441     On the Intel 386, the 'thiscall' attribute causes the compiler to
22442     pass the first argument (if of integral type) in the register ECX.
22443     Subsequent and other typed arguments are passed on the stack.  The
22444     called function pops the arguments off the stack.  If the number of
22445     arguments is variable all arguments are pushed on the stack.  The
22446     'thiscall' attribute is intended for C++ non-static member
22447     functions.  As a GCC extension, this calling convention can be used
22448     for C functions and for static member methods.
22449
22450'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
22451     The 'format' attribute specifies that a function takes 'printf',
22452     'scanf', 'strftime' or 'strfmon' style arguments that should be
22453     type-checked against a format string.  For example, the
22454     declaration:
22455
22456          extern int
22457          my_printf (void *my_object, const char *my_format, ...)
22458                __attribute__ ((format (printf, 2, 3)));
22459
22460     causes the compiler to check the arguments in calls to 'my_printf'
22461     for consistency with the 'printf' style format string argument
22462     'my_format'.
22463
22464     The parameter ARCHETYPE determines how the format string is
22465     interpreted, and should be 'printf', 'scanf', 'strftime',
22466     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
22467     also use '__printf__', '__scanf__', '__strftime__' or
22468     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
22469     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
22470     refer to the formats accepted by the system's C runtime library,
22471     while values prefixed with 'gnu_' always refer to the formats
22472     accepted by the GNU C Library.  On Microsoft Windows targets,
22473     values prefixed with 'ms_' refer to the formats accepted by the
22474     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
22475     argument is the format string argument (starting from 1), while
22476     FIRST-TO-CHECK is the number of the first argument to check against
22477     the format string.  For functions where the arguments are not
22478     available to be checked (such as 'vprintf'), specify the third
22479     parameter as zero.  In this case the compiler only checks the
22480     format string for consistency.  For 'strftime' formats, the third
22481     parameter is required to be zero.  Since non-static C++ methods
22482     have an implicit 'this' argument, the arguments of such methods
22483     should be counted from two, not one, when giving values for
22484     STRING-INDEX and FIRST-TO-CHECK.
22485
22486     In the example above, the format string ('my_format') is the second
22487     argument of the function 'my_print', and the arguments to check
22488     start with the third argument, so the correct parameters for the
22489     format attribute are 2 and 3.
22490
22491     The 'format' attribute allows you to identify your own functions
22492     that take format strings as arguments, so that GCC can check the
22493     calls to these functions for errors.  The compiler always (unless
22494     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
22495     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
22496     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
22497     'vsprintf' whenever such warnings are requested (using '-Wformat'),
22498     so there is no need to modify the header file 'stdio.h'.  In C99
22499     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
22500     and 'vsscanf' are also checked.  Except in strictly conforming C
22501     standard modes, the X/Open function 'strfmon' is also checked as
22502     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
22503     Controlling C Dialect: C Dialect Options.
22504
22505     For Objective-C dialects, 'NSString' (or '__NSString__') is
22506     recognized in the same context.  Declarations including these
22507     format attributes are parsed for correct syntax, however the result
22508     of checking of such format strings is not yet defined, and is not
22509     carried out by this version of the compiler.
22510
22511     The target may also provide additional types of format checks.
22512     *Note Format Checks Specific to Particular Target Machines: Target
22513     Format Checks.
22514
22515'format_arg (STRING-INDEX)'
22516     The 'format_arg' attribute specifies that a function takes a format
22517     string for a 'printf', 'scanf', 'strftime' or 'strfmon' style
22518     function and modifies it (for example, to translate it into another
22519     language), so the result can be passed to a 'printf', 'scanf',
22520     'strftime' or 'strfmon' style function (with the remaining
22521     arguments to the format function the same as they would have been
22522     for the unmodified string).  For example, the declaration:
22523
22524          extern char *
22525          my_dgettext (char *my_domain, const char *my_format)
22526                __attribute__ ((format_arg (2)));
22527
22528     causes the compiler to check the arguments in calls to a 'printf',
22529     'scanf', 'strftime' or 'strfmon' type function, whose format string
22530     argument is a call to the 'my_dgettext' function, for consistency
22531     with the format string argument 'my_format'.  If the 'format_arg'
22532     attribute had not been specified, all the compiler could tell in
22533     such calls to format functions would be that the format string
22534     argument is not constant; this would generate a warning when
22535     '-Wformat-nonliteral' is used, but the calls could not be checked
22536     without the attribute.
22537
22538     The parameter STRING-INDEX specifies which argument is the format
22539     string argument (starting from one).  Since non-static C++ methods
22540     have an implicit 'this' argument, the arguments of such methods
22541     should be counted from two.
22542
22543     The 'format_arg' attribute allows you to identify your own
22544     functions that modify format strings, so that GCC can check the
22545     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
22546     whose operands are a call to one of your own function.  The
22547     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
22548     this manner except when strict ISO C support is requested by
22549     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
22550     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
22551     Dialect Options.
22552
22553     For Objective-C dialects, the 'format-arg' attribute may refer to
22554     an 'NSString' reference for compatibility with the 'format'
22555     attribute above.
22556
22557     The target may also allow additional types in 'format-arg'
22558     attributes.  *Note Format Checks Specific to Particular Target
22559     Machines: Target Format Checks.
22560
22561'function_vector'
22562     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
22563     the specified function should be called through the function
22564     vector.  Calling a function through the function vector reduces
22565     code size, however; the function vector has a limited size (maximum
22566     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
22567     and shares space with the interrupt vector.
22568
22569     On SH2A targets, this attribute declares a function to be called
22570     using the TBR relative addressing mode.  The argument to this
22571     attribute is the entry number of the same function in a vector
22572     table containing all the TBR relative addressable functions.  For
22573     correct operation the TBR must be setup accordingly to point to the
22574     start of the vector table before any functions with this attribute
22575     are invoked.  Usually a good place to do the initialization is the
22576     startup routine.  The TBR relative vector table can have at max 256
22577     function entries.  The jumps to these functions are generated using
22578     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
22579     You must use GAS and GLD from GNU binutils version 2.7 or later for
22580     this attribute to work correctly.
22581
22582     Please refer the example of M16C target, to see the use of this
22583     attribute while declaring a function,
22584
22585     In an application, for a function being called once, this attribute
22586     saves at least 8 bytes of code; and if other successive calls are
22587     being made to the same function, it saves 2 bytes of code per each
22588     of these calls.
22589
22590     On M16C/M32C targets, the 'function_vector' attribute declares a
22591     special page subroutine call function.  Use of this attribute
22592     reduces the code size by 2 bytes for each call generated to the
22593     subroutine.  The argument to the attribute is the vector number
22594     entry from the special page vector table which contains the 16
22595     low-order bits of the subroutine's entry address.  Each vector
22596     table has special page number (18 to 255) that is used in 'jsrs'
22597     instructions.  Jump addresses of the routines are generated by
22598     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
22599     M32C targets), to the 2-byte addresses set in the vector table.
22600     Therefore you need to ensure that all the special page vector
22601     routines should get mapped within the address range 0x0F0000 to
22602     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
22603
22604     In the following example 2 bytes are saved for each call to
22605     function 'foo'.
22606
22607          void foo (void) __attribute__((function_vector(0x18)));
22608          void foo (void)
22609          {
22610          }
22611
22612          void bar (void)
22613          {
22614              foo();
22615          }
22616
22617     If functions are defined in one file and are called in another
22618     file, then be sure to write this declaration in both files.
22619
22620     This attribute is ignored for R8C target.
22621
22622'ifunc ("RESOLVER")'
22623     The 'ifunc' attribute is used to mark a function as an indirect
22624     function using the STT_GNU_IFUNC symbol type extension to the ELF
22625     standard.  This allows the resolution of the symbol value to be
22626     determined dynamically at load time, and an optimized version of
22627     the routine can be selected for the particular processor or other
22628     system characteristics determined then.  To use this attribute,
22629     first define the implementation functions available, and a resolver
22630     function that returns a pointer to the selected implementation
22631     function.  The implementation functions' declarations must match
22632     the API of the function being implemented, the resolver's
22633     declaration is be a function returning pointer to void function
22634     returning void:
22635
22636          void *my_memcpy (void *dst, const void *src, size_t len)
22637          {
22638            ...
22639          }
22640
22641          static void (*resolve_memcpy (void)) (void)
22642          {
22643            return my_memcpy; // we'll just always select this routine
22644          }
22645
22646     The exported header file declaring the function the user calls
22647     would contain:
22648
22649          extern void *memcpy (void *, const void *, size_t);
22650
22651     allowing the user to call this as a regular function, unaware of
22652     the implementation.  Finally, the indirect function needs to be
22653     defined in the same translation unit as the resolver function:
22654
22655          void *memcpy (void *, const void *, size_t)
22656               __attribute__ ((ifunc ("resolve_memcpy")));
22657
22658     Indirect functions cannot be weak, and require a recent binutils
22659     (at least version 2.20.1), and GNU C library (at least version
22660     2.11.1).
22661
22662'interrupt'
22663     Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D,
22664     m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the
22665     specified function is an interrupt handler.  The compiler generates
22666     function entry and exit sequences suitable for use in an interrupt
22667     handler when this attribute is present.  With Epiphany targets it
22668     may also generate a special section with code to initialize the
22669     interrupt vector table.
22670
22671     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
22672     MicroBlaze, and SH processors can be specified via the
22673     'interrupt_handler' attribute.
22674
22675     Note, on the AVR, the hardware globally disables interrupts when an
22676     interrupt is executed.  The first instruction of an interrupt
22677     handler declared with this attribute is a 'SEI' instruction to
22678     re-enable interrupts.  See also the 'signal' function attribute
22679     that does not insert a 'SEI' instruction.  If both 'signal' and
22680     'interrupt' are specified for the same function, 'signal' is
22681     silently ignored.
22682
22683     Note, for the ARM, you can specify the kind of interrupt to be
22684     handled by adding an optional parameter to the interrupt attribute
22685     like this:
22686
22687          void f () __attribute__ ((interrupt ("IRQ")));
22688
22689     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
22690     'ABORT' and 'UNDEF'.
22691
22692     On ARMv7-M the interrupt type is ignored, and the attribute means
22693     the function may be called with a word-aligned stack pointer.
22694
22695     On Epiphany targets one or more optional parameters can be added
22696     like this:
22697
22698          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22699
22700     Permissible values for these parameters are: 'reset',
22701     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
22702     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
22703     that multiple entries in the interrupt vector table should be
22704     initialized for this function, i.e. for each parameter NAME, a jump
22705     to the function is emitted in the section ivt_entry_NAME.  The
22706     parameter(s) may be omitted entirely, in which case no interrupt
22707     vector table entry is provided.
22708
22709     Note, on Epiphany targets, interrupts are enabled inside the
22710     function unless the 'disinterrupt' attribute is also specified.
22711
22712     On Epiphany targets, you can also use the following attribute to
22713     modify the behavior of an interrupt handler:
22714     'forwarder_section'
22715          The interrupt handler may be in external memory which cannot
22716          be reached by a branch instruction, so generate a local memory
22717          trampoline to transfer control.  The single parameter
22718          identifies the section where the trampoline is placed.
22719
22720     The following examples are all valid uses of these attributes on
22721     Epiphany targets:
22722          void __attribute__ ((interrupt)) universal_handler ();
22723          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
22724          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22725          void __attribute__ ((interrupt ("timer0"), disinterrupt))
22726            fast_timer_handler ();
22727          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
22728            external_dma_handler ();
22729
22730     On MIPS targets, you can use the following attributes to modify the
22731     behavior of an interrupt handler:
22732     'use_shadow_register_set'
22733          Assume that the handler uses a shadow register set, instead of
22734          the main general-purpose registers.
22735
22736     'keep_interrupts_masked'
22737          Keep interrupts masked for the whole function.  Without this
22738          attribute, GCC tries to reenable interrupts for as much of the
22739          function as it can.
22740
22741     'use_debug_exception_return'
22742          Return using the 'deret' instruction.  Interrupt handlers that
22743          don't have this attribute return using 'eret' instead.
22744
22745     You can use any combination of these attributes, as shown below:
22746          void __attribute__ ((interrupt)) v0 ();
22747          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
22748          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
22749          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
22750          void __attribute__ ((interrupt, use_shadow_register_set,
22751                               keep_interrupts_masked)) v4 ();
22752          void __attribute__ ((interrupt, use_shadow_register_set,
22753                               use_debug_exception_return)) v5 ();
22754          void __attribute__ ((interrupt, keep_interrupts_masked,
22755                               use_debug_exception_return)) v6 ();
22756          void __attribute__ ((interrupt, use_shadow_register_set,
22757                               keep_interrupts_masked,
22758                               use_debug_exception_return)) v7 ();
22759
22760     On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers
22761     intended to be used with the 'BRK' opcode (i.e. those that must end
22762     with 'RETB' instead of 'RETI').
22763
22764'interrupt_handler'
22765     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and
22766     SH to indicate that the specified function is an interrupt handler.
22767     The compiler generates function entry and exit sequences suitable
22768     for use in an interrupt handler when this attribute is present.
22769
22770'interrupt_thread'
22771     Use this attribute on fido, a subarchitecture of the m68k, to
22772     indicate that the specified function is an interrupt handler that
22773     is designed to run as a thread.  The compiler omits generate
22774     prologue/epilogue sequences and replaces the return instruction
22775     with a 'sleep' instruction.  This attribute is available only on
22776     fido.
22777
22778'isr'
22779     Use this attribute on ARM to write Interrupt Service Routines.
22780     This is an alias to the 'interrupt' attribute above.
22781
22782'kspisusp'
22783     When used together with 'interrupt_handler', 'exception_handler' or
22784     'nmi_handler', code is generated to load the stack pointer from the
22785     USP register in the function prologue.
22786
22787'l1_text'
22788     This attribute specifies a function to be placed into L1
22789     Instruction SRAM.  The function is put into a specific section
22790     named '.l1.text'.  With '-mfdpic', function calls with a such
22791     function as the callee or caller uses inlined PLT.
22792
22793'l2'
22794     On the Blackfin, this attribute specifies a function to be placed
22795     into L2 SRAM. The function is put into a specific section named
22796     '.l1.text'.  With '-mfdpic', callers of such functions use an
22797     inlined PLT.
22798
22799'leaf'
22800     Calls to external functions with this attribute must return to the
22801     current compilation unit only by return or by exception handling.
22802     In particular, leaf functions are not allowed to call callback
22803     function passed to it from the current compilation unit or directly
22804     call functions exported by the unit or longjmp into the unit.  Leaf
22805     function might still call functions from other compilation units
22806     and thus they are not necessarily leaf in the sense that they
22807     contain no function calls at all.
22808
22809     The attribute is intended for library functions to improve dataflow
22810     analysis.  The compiler takes the hint that any data not escaping
22811     the current compilation unit can not be used or modified by the
22812     leaf function.  For example, the 'sin' function is a leaf function,
22813     but 'qsort' is not.
22814
22815     Note that leaf functions might invoke signals and signal handlers
22816     might be defined in the current compilation unit and use static
22817     variables.  The only compliant way to write such a signal handler
22818     is to declare such variables 'volatile'.
22819
22820     The attribute has no effect on functions defined within the current
22821     compilation unit.  This is to allow easy merging of multiple
22822     compilation units into one, for example, by using the link-time
22823     optimization.  For this reason the attribute is not allowed on
22824     types to annotate indirect calls.
22825
22826'long_call/short_call'
22827     This attribute specifies how a particular function is called on ARM
22828     and Epiphany.  Both attributes override the '-mlong-calls' (*note
22829     ARM Options::) command-line switch and '#pragma long_calls'
22830     settings.  The 'long_call' attribute indicates that the function
22831     might be far away from the call site and require a different (more
22832     expensive) calling sequence.  The 'short_call' attribute always
22833     places the offset to the function from the call site into the 'BL'
22834     instruction directly.
22835
22836'longcall/shortcall'
22837     On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute
22838     indicates that the function might be far away from the call site
22839     and require a different (more expensive) calling sequence.  The
22840     'shortcall' attribute indicates that the function is always close
22841     enough for the shorter calling sequence to be used.  These
22842     attributes override both the '-mlongcall' switch and, on the
22843     RS/6000 and PowerPC, the '#pragma longcall' setting.
22844
22845     *Note RS/6000 and PowerPC Options::, for more information on
22846     whether long calls are necessary.
22847
22848'long_call/near/far'
22849     These attributes specify how a particular function is called on
22850     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
22851     Options::) command-line switch.  The 'long_call' and 'far'
22852     attributes are synonyms, and cause the compiler to always call the
22853     function by first loading its address into a register, and then
22854     using the contents of that register.  The 'near' attribute has the
22855     opposite effect; it specifies that non-PIC calls should be made
22856     using the more efficient 'jal' instruction.
22857
22858'malloc'
22859     The 'malloc' attribute is used to tell the compiler that a function
22860     may be treated as if any non-'NULL' pointer it returns cannot alias
22861     any other pointer valid when the function returns and that the
22862     memory has undefined content.  This often improves optimization.
22863     Standard functions with this property include 'malloc' and
22864     'calloc'.  'realloc'-like functions do not have this property as
22865     the memory pointed to does not have undefined content.
22866
22867'mips16/nomips16'
22868
22869     On MIPS targets, you can use the 'mips16' and 'nomips16' function
22870     attributes to locally select or turn off MIPS16 code generation.  A
22871     function with the 'mips16' attribute is emitted as MIPS16 code,
22872     while MIPS16 code generation is disabled for functions with the
22873     'nomips16' attribute.  These attributes override the '-mips16' and
22874     '-mno-mips16' options on the command line (*note MIPS Options::).
22875
22876     When compiling files containing mixed MIPS16 and non-MIPS16 code,
22877     the preprocessor symbol '__mips16' reflects the setting on the
22878     command line, not that within individual functions.  Mixed MIPS16
22879     and non-MIPS16 code may interact badly with some GCC extensions
22880     such as '__builtin_apply' (*note Constructing Calls::).
22881
22882'model (MODEL-NAME)'
22883
22884     On the M32R/D, use this attribute to set the addressability of an
22885     object, and of the code generated for a function.  The identifier
22886     MODEL-NAME is one of 'small', 'medium', or 'large', representing
22887     each of the code models.
22888
22889     Small model objects live in the lower 16MB of memory (so that their
22890     addresses can be loaded with the 'ld24' instruction), and are
22891     callable with the 'bl' instruction.
22892
22893     Medium model objects may live anywhere in the 32-bit address space
22894     (the compiler generates 'seth/add3' instructions to load their
22895     addresses), and are callable with the 'bl' instruction.
22896
22897     Large model objects may live anywhere in the 32-bit address space
22898     (the compiler generates 'seth/add3' instructions to load their
22899     addresses), and may not be reachable with the 'bl' instruction (the
22900     compiler generates the much slower 'seth/add3/jl' instruction
22901     sequence).
22902
22903     On IA-64, use this attribute to set the addressability of an
22904     object.  At present, the only supported identifier for MODEL-NAME
22905     is 'small', indicating addressability via "small" (22-bit)
22906     addresses (so that their addresses can be loaded with the 'addl'
22907     instruction).  Caveat: such addressing is by definition not
22908     position independent and hence this attribute must not be used for
22909     objects defined by shared libraries.
22910
22911'ms_abi/sysv_abi'
22912
22913     On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
22914     attribute to indicate which calling convention should be used for a
22915     function.  The 'ms_abi' attribute tells the compiler to use the
22916     Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to
22917     use the ABI used on GNU/Linux and other systems.  The default is to
22918     use the Microsoft ABI when targeting Windows.  On all other
22919     systems, the default is the x86/AMD ABI.
22920
22921     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
22922     currently requires the '-maccumulate-outgoing-args' option.
22923
22924'callee_pop_aggregate_return (NUMBER)'
22925
22926     On 32-bit i?86-*-* targets, you can use this attribute to control
22927     how aggregates are returned in memory.  If the caller is
22928     responsible for popping the hidden pointer together with the rest
22929     of the arguments, specify NUMBER equal to zero.  If callee is
22930     responsible for popping the hidden pointer, specify NUMBER equal to
22931     one.
22932
22933     The default i386 ABI assumes that the callee pops the stack for
22934     hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
22935     the compiler assumes that the caller pops the stack for hidden
22936     pointer.
22937
22938'ms_hook_prologue'
22939
22940     On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you
22941     can use this function attribute to make GCC generate the
22942     "hot-patching" function prologue used in Win32 API functions in
22943     Microsoft Windows XP Service Pack 2 and newer.
22944
22945'hotpatch [(PROLOGUE-HALFWORDS)]'
22946
22947     On S/390 System z targets, you can use this function attribute to
22948     make GCC generate a "hot-patching" function prologue.  The
22949     'hotpatch' has no effect on funtions that are explicitly inline.
22950     If the '-mhotpatch' or '-mno-hotpatch' command-line option is used
22951     at the same time, the 'hotpatch' attribute takes precedence.  If an
22952     argument is given, the maximum allowed value is 1000000.
22953
22954'naked'
22955     Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
22956     indicate that the specified function does not need
22957     prologue/epilogue sequences generated by the compiler.  It is up to
22958     the programmer to provide these sequences.  The only statements
22959     that can be safely included in naked functions are 'asm' statements
22960     that do not have operands.  All other statements, including
22961     declarations of local variables, 'if' statements, and so forth,
22962     should be avoided.  Naked functions should be used to implement the
22963     body of an assembly function, while allowing the compiler to
22964     construct the requisite function declaration for the assembler.
22965
22966'near'
22967     On 68HC11 and 68HC12 the 'near' attribute causes the compiler to
22968     use the normal calling convention based on 'jsr' and 'rts'.  This
22969     attribute can be used to cancel the effect of the '-mlong-calls'
22970     option.
22971
22972     On MeP targets this attribute causes the compiler to assume the
22973     called function is close enough to use the normal calling
22974     convention, overriding the '-mtf' command-line option.
22975
22976'nesting'
22977     Use this attribute together with 'interrupt_handler',
22978     'exception_handler' or 'nmi_handler' to indicate that the function
22979     entry code should enable nested interrupts or exceptions.
22980
22981'nmi_handler'
22982     Use this attribute on the Blackfin to indicate that the specified
22983     function is an NMI handler.  The compiler generates function entry
22984     and exit sequences suitable for use in an NMI handler when this
22985     attribute is present.
22986
22987'no_instrument_function'
22988     If '-finstrument-functions' is given, profiling function calls are
22989     generated at entry and exit of most user-compiled functions.
22990     Functions with this attribute are not so instrumented.
22991
22992'no_split_stack'
22993     If '-fsplit-stack' is given, functions have a small prologue which
22994     decides whether to split the stack.  Functions with the
22995     'no_split_stack' attribute do not have that prologue, and thus may
22996     run with only a small amount of stack space available.
22997
22998'noinline'
22999     This function attribute prevents a function from being considered
23000     for inlining.  If the function does not have side-effects, there
23001     are optimizations other than inlining that cause function calls to
23002     be optimized away, although the function call is live.  To keep
23003     such calls from being optimized away, put
23004          asm ("");
23005
23006     (*note Extended Asm::) in the called function, to serve as a
23007     special side-effect.
23008
23009'noclone'
23010     This function attribute prevents a function from being considered
23011     for cloning--a mechanism that produces specialized copies of
23012     functions and which is (currently) performed by interprocedural
23013     constant propagation.
23014
23015'nonnull (ARG-INDEX, ...)'
23016     The 'nonnull' attribute specifies that some function parameters
23017     should be non-null pointers.  For instance, the declaration:
23018
23019          extern void *
23020          my_memcpy (void *dest, const void *src, size_t len)
23021                  __attribute__((nonnull (1, 2)));
23022
23023     causes the compiler to check that, in calls to 'my_memcpy',
23024     arguments DEST and SRC are non-null.  If the compiler determines
23025     that a null pointer is passed in an argument slot marked as
23026     non-null, and the '-Wnonnull' option is enabled, a warning is
23027     issued.  The compiler may also choose to make optimizations based
23028     on the knowledge that certain function arguments will never be
23029     null.
23030
23031     If no argument index list is given to the 'nonnull' attribute, all
23032     pointer arguments are marked as non-null.  To illustrate, the
23033     following declaration is equivalent to the previous example:
23034
23035          extern void *
23036          my_memcpy (void *dest, const void *src, size_t len)
23037                  __attribute__((nonnull));
23038
23039'noreturn'
23040     A few standard library functions, such as 'abort' and 'exit',
23041     cannot return.  GCC knows this automatically.  Some programs define
23042     their own functions that never return.  You can declare them
23043     'noreturn' to tell the compiler this fact.  For example,
23044
23045          void fatal () __attribute__ ((noreturn));
23046
23047          void
23048          fatal (/* ... */)
23049          {
23050            /* ... */ /* Print error message. */ /* ... */
23051            exit (1);
23052          }
23053
23054     The 'noreturn' keyword tells the compiler to assume that 'fatal'
23055     cannot return.  It can then optimize without regard to what would
23056     happen if 'fatal' ever did return.  This makes slightly better
23057     code.  More importantly, it helps avoid spurious warnings of
23058     uninitialized variables.
23059
23060     The 'noreturn' keyword does not affect the exceptional path when
23061     that applies: a 'noreturn'-marked function may still return to the
23062     caller by throwing an exception or calling 'longjmp'.
23063
23064     Do not assume that registers saved by the calling function are
23065     restored before calling the 'noreturn' function.
23066
23067     It does not make sense for a 'noreturn' function to have a return
23068     type other than 'void'.
23069
23070     The attribute 'noreturn' is not implemented in GCC versions earlier
23071     than 2.5.  An alternative way to declare that a function does not
23072     return, which works in the current version and in some older
23073     versions, is as follows:
23074
23075          typedef void voidfn ();
23076
23077          volatile voidfn fatal;
23078
23079     This approach does not work in GNU C++.
23080
23081'nothrow'
23082     The 'nothrow' attribute is used to inform the compiler that a
23083     function cannot throw an exception.  For example, most functions in
23084     the standard C library can be guaranteed not to throw an exception
23085     with the notable exceptions of 'qsort' and 'bsearch' that take
23086     function pointer arguments.  The 'nothrow' attribute is not
23087     implemented in GCC versions earlier than 3.3.
23088
23089'nosave_low_regs'
23090     Use this attribute on SH targets to indicate that an
23091     'interrupt_handler' function should not save and restore registers
23092     R0..R7.  This can be used on SH3* and SH4* targets that have a
23093     second R0..R7 register bank for non-reentrant interrupt handlers.
23094
23095'optimize'
23096     The 'optimize' attribute is used to specify that a function is to
23097     be compiled with different optimization options than specified on
23098     the command line.  Arguments can either be numbers or strings.
23099     Numbers are assumed to be an optimization level.  Strings that
23100     begin with 'O' are assumed to be an optimization option, while
23101     other options are assumed to be used with a '-f' prefix.  You can
23102     also use the '#pragma GCC optimize' pragma to set the optimization
23103     options that affect more than one function.  *Note Function
23104     Specific Option Pragmas::, for details about the '#pragma GCC
23105     optimize' pragma.
23106
23107     This can be used for instance to have frequently-executed functions
23108     compiled with more aggressive optimization options that produce
23109     faster and larger code, while other functions can be compiled with
23110     less aggressive options.
23111
23112'OS_main/OS_task'
23113     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
23114     save/restore any call-saved register in their prologue/epilogue.
23115
23116     The 'OS_main' attribute can be used when there _is guarantee_ that
23117     interrupts are disabled at the time when the function is entered.
23118     This saves resources when the stack pointer has to be changed to
23119     set up a frame for local variables.
23120
23121     The 'OS_task' attribute can be used when there is _no guarantee_
23122     that interrupts are disabled at that time when the function is
23123     entered like for, e.g.  task functions in a multi-threading
23124     operating system.  In that case, changing the stack pointer
23125     register is guarded by save/clear/restore of the global interrupt
23126     enable flag.
23127
23128     The differences to the 'naked' function attribute are:
23129        * 'naked' functions do not have a return instruction whereas
23130          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
23131          return instruction.
23132        * 'naked' functions do not set up a frame for local variables or
23133          a frame pointer whereas 'OS_main' and 'OS_task' do this as
23134          needed.
23135
23136'pcs'
23137
23138     The 'pcs' attribute can be used to control the calling convention
23139     used for a function on ARM. The attribute takes an argument that
23140     specifies the calling convention to use.
23141
23142     When compiling using the AAPCS ABI (or a variant of it) then valid
23143     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
23144     to use a variant other than '"aapcs"' then the compiler must be
23145     permitted to use the appropriate co-processor registers (i.e., the
23146     VFP registers must be available in order to use '"aapcs-vfp"').
23147     For example,
23148
23149          /* Argument passed in r0, and result returned in r0+r1.  */
23150          double f2d (float) __attribute__((pcs("aapcs")));
23151
23152     Variadic functions always use the '"aapcs"' calling convention and
23153     the compiler rejects attempts to specify an alternative.
23154
23155'pure'
23156     Many functions have no effects except the return value and their
23157     return value depends only on the parameters and/or global
23158     variables.  Such a function can be subject to common subexpression
23159     elimination and loop optimization just as an arithmetic operator
23160     would be.  These functions should be declared with the attribute
23161     'pure'.  For example,
23162
23163          int square (int) __attribute__ ((pure));
23164
23165     says that the hypothetical function 'square' is safe to call fewer
23166     times than the program says.
23167
23168     Some of common examples of pure functions are 'strlen' or 'memcmp'.
23169     Interesting non-pure functions are functions with infinite loops or
23170     those depending on volatile memory or other system resource, that
23171     may change between two consecutive calls (such as 'feof' in a
23172     multithreading environment).
23173
23174     The attribute 'pure' is not implemented in GCC versions earlier
23175     than 2.96.
23176
23177'hot'
23178     The 'hot' attribute on a function is used to inform the compiler
23179     that the function is a hot spot of the compiled program.  The
23180     function is optimized more aggressively and on many target it is
23181     placed into special subsection of the text section so all hot
23182     functions appears close together improving locality.
23183
23184     When profile feedback is available, via '-fprofile-use', hot
23185     functions are automatically detected and this attribute is ignored.
23186
23187     The 'hot' attribute on functions is not implemented in GCC versions
23188     earlier than 4.3.
23189
23190     The 'hot' attribute on a label is used to inform the compiler that
23191     path following the label are more likely than paths that are not so
23192     annotated.  This attribute is used in cases where
23193     '__builtin_expect' cannot be used, for instance with computed goto
23194     or 'asm goto'.
23195
23196     The 'hot' attribute on labels is not implemented in GCC versions
23197     earlier than 4.8.
23198
23199'cold'
23200     The 'cold' attribute on functions is used to inform the compiler
23201     that the function is unlikely to be executed.  The function is
23202     optimized for size rather than speed and on many targets it is
23203     placed into special subsection of the text section so all cold
23204     functions appears close together improving code locality of
23205     non-cold parts of program.  The paths leading to call of cold
23206     functions within code are marked as unlikely by the branch
23207     prediction mechanism.  It is thus useful to mark functions used to
23208     handle unlikely conditions, such as 'perror', as cold to improve
23209     optimization of hot functions that do call marked functions in rare
23210     occasions.
23211
23212     When profile feedback is available, via '-fprofile-use', cold
23213     functions are automatically detected and this attribute is ignored.
23214
23215     The 'cold' attribute on functions is not implemented in GCC
23216     versions earlier than 4.3.
23217
23218     The 'cold' attribute on labels is used to inform the compiler that
23219     the path following the label is unlikely to be executed.  This
23220     attribute is used in cases where '__builtin_expect' cannot be used,
23221     for instance with computed goto or 'asm goto'.
23222
23223     The 'cold' attribute on labels is not implemented in GCC versions
23224     earlier than 4.8.
23225
23226'no_sanitize_address'
23227'no_address_safety_analysis'
23228     The 'no_sanitize_address' attribute on functions is used to inform
23229     the compiler that it should not instrument memory accesses in the
23230     function when compiling with the '-fsanitize=address' option.  The
23231     'no_address_safety_analysis' is a deprecated alias of the
23232     'no_sanitize_address' attribute, new code should use
23233     'no_sanitize_address'.
23234
23235'regparm (NUMBER)'
23236     On the Intel 386, the 'regparm' attribute causes the compiler to
23237     pass arguments number one to NUMBER if they are of integral type in
23238     registers EAX, EDX, and ECX instead of on the stack.  Functions
23239     that take a variable number of arguments continue to be passed all
23240     of their arguments on the stack.
23241
23242     Beware that on some ELF systems this attribute is unsuitable for
23243     global functions in shared libraries with lazy binding (which is
23244     the default).  Lazy binding sends the first call via resolving code
23245     in the loader, which might assume EAX, EDX and ECX can be
23246     clobbered, as per the standard calling conventions.  Solaris 8 is
23247     affected by this.  Systems with the GNU C Library version 2.1 or
23248     higher and FreeBSD are believed to be safe since the loaders there
23249     save EAX, EDX and ECX. (Lazy binding can be disabled with the
23250     linker or the loader if desired, to avoid the problem.)
23251
23252'sseregparm'
23253     On the Intel 386 with SSE support, the 'sseregparm' attribute
23254     causes the compiler to pass up to 3 floating-point arguments in SSE
23255     registers instead of on the stack.  Functions that take a variable
23256     number of arguments continue to pass all of their floating-point
23257     arguments on the stack.
23258
23259'force_align_arg_pointer'
23260     On the Intel x86, the 'force_align_arg_pointer' attribute may be
23261     applied to individual function definitions, generating an alternate
23262     prologue and epilogue that realigns the run-time stack if
23263     necessary.  This supports mixing legacy codes that run with a
23264     4-byte aligned stack with modern codes that keep a 16-byte stack
23265     for SSE compatibility.
23266
23267'renesas'
23268     On SH targets this attribute specifies that the function or struct
23269     follows the Renesas ABI.
23270
23271'resbank'
23272     On the SH2A target, this attribute enables the high-speed register
23273     saving and restoration using a register bank for
23274     'interrupt_handler' routines.  Saving to the bank is performed
23275     automatically after the CPU accepts an interrupt that uses a
23276     register bank.
23277
23278     The nineteen 32-bit registers comprising general register R0 to
23279     R14, control register GBR, and system registers MACH, MACL, and PR
23280     and the vector table address offset are saved into a register bank.
23281     Register banks are stacked in first-in last-out (FILO) sequence.
23282     Restoration from the bank is executed by issuing a RESBANK
23283     instruction.
23284
23285'returns_twice'
23286     The 'returns_twice' attribute tells the compiler that a function
23287     may return more than one time.  The compiler ensures that all
23288     registers are dead before calling such a function and emits a
23289     warning about the variables that may be clobbered after the second
23290     return from the function.  Examples of such functions are 'setjmp'
23291     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
23292     any, might need to be marked with the 'noreturn' attribute.
23293
23294'saveall'
23295     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
23296     indicate that all registers except the stack pointer should be
23297     saved in the prologue regardless of whether they are used or not.
23298
23299'save_volatiles'
23300     Use this attribute on the MicroBlaze to indicate that the function
23301     is an interrupt handler.  All volatile registers (in addition to
23302     non-volatile registers) are saved in the function prologue.  If the
23303     function is a leaf function, only volatiles used by the function
23304     are saved.  A normal function return is generated instead of a
23305     return from interrupt.
23306
23307'section ("SECTION-NAME")'
23308     Normally, the compiler places the code it generates in the 'text'
23309     section.  Sometimes, however, you need additional sections, or you
23310     need certain particular functions to appear in special sections.
23311     The 'section' attribute specifies that a function lives in a
23312     particular section.  For example, the declaration:
23313
23314          extern void foobar (void) __attribute__ ((section ("bar")));
23315
23316     puts the function 'foobar' in the 'bar' section.
23317
23318     Some file formats do not support arbitrary sections so the
23319     'section' attribute is not available on all platforms.  If you need
23320     to map the entire contents of a module to a particular section,
23321     consider using the facilities of the linker instead.
23322
23323'sentinel'
23324     This function attribute ensures that a parameter in a function call
23325     is an explicit 'NULL'.  The attribute is only valid on variadic
23326     functions.  By default, the sentinel is located at position zero,
23327     the last parameter of the function call.  If an optional integer
23328     position argument P is supplied to the attribute, the sentinel must
23329     be located at position P counting backwards from the end of the
23330     argument list.
23331
23332          __attribute__ ((sentinel))
23333          is equivalent to
23334          __attribute__ ((sentinel(0)))
23335
23336     The attribute is automatically set with a position of 0 for the
23337     built-in functions 'execl' and 'execlp'.  The built-in function
23338     'execle' has the attribute set with a position of 1.
23339
23340     A valid 'NULL' in this context is defined as zero with any pointer
23341     type.  If your system defines the 'NULL' macro with an integer type
23342     then you need to add an explicit cast.  GCC replaces 'stddef.h'
23343     with a copy that redefines NULL appropriately.
23344
23345     The warnings for missing or incorrect sentinels are enabled with
23346     '-Wformat'.
23347
23348'short_call'
23349     See 'long_call/short_call'.
23350
23351'shortcall'
23352     See 'longcall/shortcall'.
23353
23354'signal'
23355     Use this attribute on the AVR to indicate that the specified
23356     function is an interrupt handler.  The compiler generates function
23357     entry and exit sequences suitable for use in an interrupt handler
23358     when this attribute is present.
23359
23360     See also the 'interrupt' function attribute.
23361
23362     The AVR hardware globally disables interrupts when an interrupt is
23363     executed.  Interrupt handler functions defined with the 'signal'
23364     attribute do not re-enable interrupts.  It is save to enable
23365     interrupts in a 'signal' handler.  This "save" only applies to the
23366     code generated by the compiler and not to the IRQ layout of the
23367     application which is responsibility of the application.
23368
23369     If both 'signal' and 'interrupt' are specified for the same
23370     function, 'signal' is silently ignored.
23371
23372'sp_switch'
23373     Use this attribute on the SH to indicate an 'interrupt_handler'
23374     function should switch to an alternate stack.  It expects a string
23375     argument that names a global variable holding the address of the
23376     alternate stack.
23377
23378          void *alt_stack;
23379          void f () __attribute__ ((interrupt_handler,
23380                                    sp_switch ("alt_stack")));
23381
23382'stdcall'
23383     On the Intel 386, the 'stdcall' attribute causes the compiler to
23384     assume that the called function pops off the stack space used to
23385     pass arguments, unless it takes a variable number of arguments.
23386
23387'syscall_linkage'
23388     This attribute is used to modify the IA-64 calling convention by
23389     marking all input registers as live at all function exits.  This
23390     makes it possible to restart a system call after an interrupt
23391     without having to save/restore the input registers.  This also
23392     prevents kernel data from leaking into application code.
23393
23394'target'
23395     The 'target' attribute is used to specify that a function is to be
23396     compiled with different target options than specified on the
23397     command line.  This can be used for instance to have functions
23398     compiled with a different ISA (instruction set architecture) than
23399     the default.  You can also use the '#pragma GCC target' pragma to
23400     set more than one function to be compiled with specific target
23401     options.  *Note Function Specific Option Pragmas::, for details
23402     about the '#pragma GCC target' pragma.
23403
23404     For instance on a 386, you could compile one function with
23405     'target("sse4.1,arch=core2")' and another with
23406     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
23407     the first function with '-msse4.1' and '-march=core2' options, and
23408     the second function with '-msse4a' and '-march=amdfam10' options.
23409     It is up to the user to make sure that a function is only invoked
23410     on a machine that supports the particular ISA it is compiled for
23411     (for example by using 'cpuid' on 386 to determine what feature bits
23412     and architecture family are used).
23413
23414          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
23415          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
23416
23417     On the 386, the following options are allowed:
23418
23419     'abm'
23420     'no-abm'
23421          Enable/disable the generation of the advanced bit
23422          instructions.
23423
23424     'aes'
23425     'no-aes'
23426          Enable/disable the generation of the AES instructions.
23427
23428     'default'
23429          *Note Function Multiversioning::, where it is used to specify
23430          the default function version.
23431
23432     'mmx'
23433     'no-mmx'
23434          Enable/disable the generation of the MMX instructions.
23435
23436     'pclmul'
23437     'no-pclmul'
23438          Enable/disable the generation of the PCLMUL instructions.
23439
23440     'popcnt'
23441     'no-popcnt'
23442          Enable/disable the generation of the POPCNT instruction.
23443
23444     'sse'
23445     'no-sse'
23446          Enable/disable the generation of the SSE instructions.
23447
23448     'sse2'
23449     'no-sse2'
23450          Enable/disable the generation of the SSE2 instructions.
23451
23452     'sse3'
23453     'no-sse3'
23454          Enable/disable the generation of the SSE3 instructions.
23455
23456     'sse4'
23457     'no-sse4'
23458          Enable/disable the generation of the SSE4 instructions (both
23459          SSE4.1 and SSE4.2).
23460
23461     'sse4.1'
23462     'no-sse4.1'
23463          Enable/disable the generation of the sse4.1 instructions.
23464
23465     'sse4.2'
23466     'no-sse4.2'
23467          Enable/disable the generation of the sse4.2 instructions.
23468
23469     'sse4a'
23470     'no-sse4a'
23471          Enable/disable the generation of the SSE4A instructions.
23472
23473     'fma4'
23474     'no-fma4'
23475          Enable/disable the generation of the FMA4 instructions.
23476
23477     'xop'
23478     'no-xop'
23479          Enable/disable the generation of the XOP instructions.
23480
23481     'lwp'
23482     'no-lwp'
23483          Enable/disable the generation of the LWP instructions.
23484
23485     'ssse3'
23486     'no-ssse3'
23487          Enable/disable the generation of the SSSE3 instructions.
23488
23489     'cld'
23490     'no-cld'
23491          Enable/disable the generation of the CLD before string moves.
23492
23493     'fancy-math-387'
23494     'no-fancy-math-387'
23495          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
23496          instructions on the 387 floating-point unit.
23497
23498     'fused-madd'
23499     'no-fused-madd'
23500          Enable/disable the generation of the fused multiply/add
23501          instructions.
23502
23503     'ieee-fp'
23504     'no-ieee-fp'
23505          Enable/disable the generation of floating point that depends
23506          on IEEE arithmetic.
23507
23508     'inline-all-stringops'
23509     'no-inline-all-stringops'
23510          Enable/disable inlining of string operations.
23511
23512     'inline-stringops-dynamically'
23513     'no-inline-stringops-dynamically'
23514          Enable/disable the generation of the inline code to do small
23515          string operations and calling the library routines for large
23516          operations.
23517
23518     'align-stringops'
23519     'no-align-stringops'
23520          Do/do not align destination of inlined string operations.
23521
23522     'recip'
23523     'no-recip'
23524          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
23525          RSQRTPS instructions followed an additional Newton-Raphson
23526          step instead of doing a floating-point division.
23527
23528     'arch=ARCH'
23529          Specify the architecture to generate code for in compiling the
23530          function.
23531
23532     'tune=TUNE'
23533          Specify the architecture to tune for in compiling the
23534          function.
23535
23536     'fpmath=FPMATH'
23537          Specify which floating-point unit to use.  The
23538          'target("fpmath=sse,387")' option must be specified as
23539          'target("fpmath=sse+387")' because the comma would separate
23540          different options.
23541
23542     On the PowerPC, the following options are allowed:
23543
23544     'altivec'
23545     'no-altivec'
23546          Generate code that uses (does not use) AltiVec instructions.
23547          In 32-bit code, you cannot enable AltiVec instructions unless
23548          '-mabi=altivec' is used on the command line.
23549
23550     'cmpb'
23551     'no-cmpb'
23552          Generate code that uses (does not use) the compare bytes
23553          instruction implemented on the POWER6 processor and other
23554          processors that support the PowerPC V2.05 architecture.
23555
23556     'dlmzb'
23557     'no-dlmzb'
23558          Generate code that uses (does not use) the string-search
23559          'dlmzb' instruction on the IBM 405, 440, 464 and 476
23560          processors.  This instruction is generated by default when
23561          targeting those processors.
23562
23563     'fprnd'
23564     'no-fprnd'
23565          Generate code that uses (does not use) the FP round to integer
23566          instructions implemented on the POWER5+ processor and other
23567          processors that support the PowerPC V2.03 architecture.
23568
23569     'hard-dfp'
23570     'no-hard-dfp'
23571          Generate code that uses (does not use) the decimal
23572          floating-point instructions implemented on some POWER
23573          processors.
23574
23575     'isel'
23576     'no-isel'
23577          Generate code that uses (does not use) ISEL instruction.
23578
23579     'mfcrf'
23580     'no-mfcrf'
23581          Generate code that uses (does not use) the move from condition
23582          register field instruction implemented on the POWER4 processor
23583          and other processors that support the PowerPC V2.01
23584          architecture.
23585
23586     'mfpgpr'
23587     'no-mfpgpr'
23588          Generate code that uses (does not use) the FP move to/from
23589          general purpose register instructions implemented on the
23590          POWER6X processor and other processors that support the
23591          extended PowerPC V2.05 architecture.
23592
23593     'mulhw'
23594     'no-mulhw'
23595          Generate code that uses (does not use) the half-word multiply
23596          and multiply-accumulate instructions on the IBM 405, 440, 464
23597          and 476 processors.  These instructions are generated by
23598          default when targeting those processors.
23599
23600     'multiple'
23601     'no-multiple'
23602          Generate code that uses (does not use) the load multiple word
23603          instructions and the store multiple word instructions.
23604
23605     'update'
23606     'no-update'
23607          Generate code that uses (does not use) the load or store
23608          instructions that update the base register to the address of
23609          the calculated memory location.
23610
23611     'popcntb'
23612     'no-popcntb'
23613          Generate code that uses (does not use) the popcount and
23614          double-precision FP reciprocal estimate instruction
23615          implemented on the POWER5 processor and other processors that
23616          support the PowerPC V2.02 architecture.
23617
23618     'popcntd'
23619     'no-popcntd'
23620          Generate code that uses (does not use) the popcount
23621          instruction implemented on the POWER7 processor and other
23622          processors that support the PowerPC V2.06 architecture.
23623
23624     'powerpc-gfxopt'
23625     'no-powerpc-gfxopt'
23626          Generate code that uses (does not use) the optional PowerPC
23627          architecture instructions in the Graphics group, including
23628          floating-point select.
23629
23630     'powerpc-gpopt'
23631     'no-powerpc-gpopt'
23632          Generate code that uses (does not use) the optional PowerPC
23633          architecture instructions in the General Purpose group,
23634          including floating-point square root.
23635
23636     'recip-precision'
23637     'no-recip-precision'
23638          Assume (do not assume) that the reciprocal estimate
23639          instructions provide higher-precision estimates than is
23640          mandated by the powerpc ABI.
23641
23642     'string'
23643     'no-string'
23644          Generate code that uses (does not use) the load string
23645          instructions and the store string word instructions to save
23646          multiple registers and do small block moves.
23647
23648     'vsx'
23649     'no-vsx'
23650          Generate code that uses (does not use) vector/scalar (VSX)
23651          instructions, and also enable the use of built-in functions
23652          that allow more direct access to the VSX instruction set.  In
23653          32-bit code, you cannot enable VSX or AltiVec instructions
23654          unless '-mabi=altivec' is used on the command line.
23655
23656     'friz'
23657     'no-friz'
23658          Generate (do not generate) the 'friz' instruction when the
23659          '-funsafe-math-optimizations' option is used to optimize
23660          rounding a floating-point value to 64-bit integer and back to
23661          floating point.  The 'friz' instruction does not return the
23662          same value if the floating-point number is too large to fit in
23663          an integer.
23664
23665     'avoid-indexed-addresses'
23666     'no-avoid-indexed-addresses'
23667          Generate code that tries to avoid (not avoid) the use of
23668          indexed load or store instructions.
23669
23670     'paired'
23671     'no-paired'
23672          Generate code that uses (does not use) the generation of
23673          PAIRED simd instructions.
23674
23675     'longcall'
23676     'no-longcall'
23677          Generate code that assumes (does not assume) that all calls
23678          are far away so that a longer more expensive calling sequence
23679          is required.
23680
23681     'cpu=CPU'
23682          Specify the architecture to generate code for when compiling
23683          the function.  If you select the 'target("cpu=power7")'
23684          attribute when generating 32-bit code, VSX and AltiVec
23685          instructions are not generated unless you use the
23686          '-mabi=altivec' option on the command line.
23687
23688     'tune=TUNE'
23689          Specify the architecture to tune for when compiling the
23690          function.  If you do not specify the 'target("tune=TUNE")'
23691          attribute and you do specify the 'target("cpu=CPU")'
23692          attribute, compilation tunes for the CPU architecture, and not
23693          the default tuning specified on the command line.
23694
23695     On the 386/x86_64 and PowerPC back ends, you can use either
23696     multiple strings to specify multiple options, or you can separate
23697     the option with a comma (',').
23698
23699     On the 386/x86_64 and PowerPC back ends, the inliner does not
23700     inline a function that has different target options than the
23701     caller, unless the callee has a subset of the target options of the
23702     caller.  For example a function declared with 'target("sse3")' can
23703     inline a function with 'target("sse2")', since '-msse3' implies
23704     '-msse2'.
23705
23706     The 'target' attribute is not implemented in GCC versions earlier
23707     than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends.  It
23708     is not currently implemented for other back ends.
23709
23710'tiny_data'
23711     Use this attribute on the H8/300H and H8S to indicate that the
23712     specified variable should be placed into the tiny data section.
23713     The compiler generates more efficient code for loads and stores on
23714     data in the tiny data section.  Note the tiny data area is limited
23715     to slightly under 32KB of data.
23716
23717'trap_exit'
23718     Use this attribute on the SH for an 'interrupt_handler' to return
23719     using 'trapa' instead of 'rte'.  This attribute expects an integer
23720     argument specifying the trap number to be used.
23721
23722'trapa_handler'
23723     On SH targets this function attribute is similar to
23724     'interrupt_handler' but it does not save and restore all registers.
23725
23726'unused'
23727     This attribute, attached to a function, means that the function is
23728     meant to be possibly unused.  GCC does not produce a warning for
23729     this function.
23730
23731'used'
23732     This attribute, attached to a function, means that code must be
23733     emitted for the function even if it appears that the function is
23734     not referenced.  This is useful, for example, when the function is
23735     referenced only in inline assembly.
23736
23737     When applied to a member function of a C++ class template, the
23738     attribute also means that the function is instantiated if the class
23739     itself is instantiated.
23740
23741'version_id'
23742     This IA-64 HP-UX attribute, attached to a global variable or
23743     function, renames a symbol to contain a version string, thus
23744     allowing for function level versioning.  HP-UX system header files
23745     may use version level functioning for some system calls.
23746
23747          extern int foo () __attribute__((version_id ("20040821")));
23748
23749     Calls to FOO are mapped to calls to FOO{20040821}.
23750
23751'visibility ("VISIBILITY_TYPE")'
23752     This attribute affects the linkage of the declaration to which it
23753     is attached.  There are four supported VISIBILITY_TYPE values:
23754     default, hidden, protected or internal visibility.
23755
23756          void __attribute__ ((visibility ("protected")))
23757          f () { /* Do something. */; }
23758          int i __attribute__ ((visibility ("hidden")));
23759
23760     The possible values of VISIBILITY_TYPE correspond to the visibility
23761     settings in the ELF gABI.
23762
23763     "default"
23764          Default visibility is the normal case for the object file
23765          format.  This value is available for the visibility attribute
23766          to override other options that may change the assumed
23767          visibility of entities.
23768
23769          On ELF, default visibility means that the declaration is
23770          visible to other modules and, in shared libraries, means that
23771          the declared entity may be overridden.
23772
23773          On Darwin, default visibility means that the declaration is
23774          visible to other modules.
23775
23776          Default visibility corresponds to "external linkage" in the
23777          language.
23778
23779     "hidden"
23780          Hidden visibility indicates that the entity declared has a new
23781          form of linkage, which we call "hidden linkage".  Two
23782          declarations of an object with hidden linkage refer to the
23783          same object if they are in the same shared object.
23784
23785     "internal"
23786          Internal visibility is like hidden visibility, but with
23787          additional processor specific semantics.  Unless otherwise
23788          specified by the psABI, GCC defines internal visibility to
23789          mean that a function is _never_ called from another module.
23790          Compare this with hidden functions which, while they cannot be
23791          referenced directly by other modules, can be referenced
23792          indirectly via function pointers.  By indicating that a
23793          function cannot be called from outside the module, GCC may for
23794          instance omit the load of a PIC register since it is known
23795          that the calling function loaded the correct value.
23796
23797     "protected"
23798          Protected visibility is like default visibility except that it
23799          indicates that references within the defining module bind to
23800          the definition in that module.  That is, the declared entity
23801          cannot be overridden by another module.
23802
23803     All visibilities are supported on many, but not all, ELF targets
23804     (supported when the assembler supports the '.visibility'
23805     pseudo-op).  Default visibility is supported everywhere.  Hidden
23806     visibility is supported on Darwin targets.
23807
23808     The visibility attribute should be applied only to declarations
23809     that would otherwise have external linkage.  The attribute should
23810     be applied consistently, so that the same entity should not be
23811     declared with different settings of the attribute.
23812
23813     In C++, the visibility attribute applies to types as well as
23814     functions and objects, because in C++ types have linkage.  A class
23815     must not have greater visibility than its non-static data member
23816     types and bases, and class members default to the visibility of
23817     their class.  Also, a declaration without explicit visibility is
23818     limited to the visibility of its type.
23819
23820     In C++, you can mark member functions and static member variables
23821     of a class with the visibility attribute.  This is useful if you
23822     know a particular method or static member variable should only be
23823     used from one shared object; then you can mark it hidden while the
23824     rest of the class has default visibility.  Care must be taken to
23825     avoid breaking the One Definition Rule; for example, it is usually
23826     not useful to mark an inline method as hidden without marking the
23827     whole class as hidden.
23828
23829     A C++ namespace declaration can also have the visibility attribute.
23830     This attribute applies only to the particular namespace body, not
23831     to other definitions of the same namespace; it is equivalent to
23832     using '#pragma GCC visibility' before and after the namespace
23833     definition (*note Visibility Pragmas::).
23834
23835     In C++, if a template argument has limited visibility, this
23836     restriction is implicitly propagated to the template instantiation.
23837     Otherwise, template instantiations and specializations default to
23838     the visibility of their template.
23839
23840     If both the template and enclosing class have explicit visibility,
23841     the visibility from the template is used.
23842
23843'vliw'
23844     On MeP, the 'vliw' attribute tells the compiler to emit
23845     instructions in VLIW mode instead of core mode.  Note that this
23846     attribute is not allowed unless a VLIW coprocessor has been
23847     configured and enabled through command-line options.
23848
23849'warn_unused_result'
23850     The 'warn_unused_result' attribute causes a warning to be emitted
23851     if a caller of the function with this attribute does not use its
23852     return value.  This is useful for functions where not checking the
23853     result is either a security problem or always a bug, such as
23854     'realloc'.
23855
23856          int fn () __attribute__ ((warn_unused_result));
23857          int foo ()
23858          {
23859            if (fn () < 0) return -1;
23860            fn ();
23861            return 0;
23862          }
23863
23864     results in warning on line 5.
23865
23866'weak'
23867     The 'weak' attribute causes the declaration to be emitted as a weak
23868     symbol rather than a global.  This is primarily useful in defining
23869     library functions that can be overridden in user code, though it
23870     can also be used with non-function declarations.  Weak symbols are
23871     supported for ELF targets, and also for a.out targets when using
23872     the GNU assembler and linker.
23873
23874'weakref'
23875'weakref ("TARGET")'
23876     The 'weakref' attribute marks a declaration as a weak reference.
23877     Without arguments, it should be accompanied by an 'alias' attribute
23878     naming the target symbol.  Optionally, the TARGET may be given as
23879     an argument to 'weakref' itself.  In either case, 'weakref'
23880     implicitly marks the declaration as 'weak'.  Without a TARGET,
23881     given as an argument to 'weakref' or to 'alias', 'weakref' is
23882     equivalent to 'weak'.
23883
23884          static int x() __attribute__ ((weakref ("y")));
23885          /* is equivalent to... */
23886          static int x() __attribute__ ((weak, weakref, alias ("y")));
23887          /* and to... */
23888          static int x() __attribute__ ((weakref));
23889          static int x() __attribute__ ((alias ("y")));
23890
23891     A weak reference is an alias that does not by itself require a
23892     definition to be given for the target symbol.  If the target symbol
23893     is only referenced through weak references, then it becomes a
23894     'weak' undefined symbol.  If it is directly referenced, however,
23895     then such strong references prevail, and a definition is required
23896     for the symbol, not necessarily in the same translation unit.
23897
23898     The effect is equivalent to moving all references to the alias to a
23899     separate translation unit, renaming the alias to the aliased
23900     symbol, declaring it as weak, compiling the two separate
23901     translation units and performing a reloadable link on them.
23902
23903     At present, a declaration to which 'weakref' is attached can only
23904     be 'static'.
23905
23906 You can specify multiple attributes in a declaration by separating them
23907by commas within the double parentheses or by immediately following an
23908attribute declaration with another attribute declaration.
23909
23910 Some people object to the '__attribute__' feature, suggesting that ISO
23911C's '#pragma' should be used instead.  At the time '__attribute__' was
23912designed, there were two reasons for not doing this.
23913
23914  1. It is impossible to generate '#pragma' commands from a macro.
23915
23916  2. There is no telling what the same '#pragma' might mean in another
23917     compiler.
23918
23919 These two reasons applied to almost any application that might have
23920been proposed for '#pragma'.  It was basically a mistake to use
23921'#pragma' for _anything_.
23922
23923 The ISO C99 standard includes '_Pragma', which now allows pragmas to be
23924generated from macros.  In addition, a '#pragma GCC' namespace is now in
23925use for GCC-specific pragmas.  However, it has been found convenient to
23926use '__attribute__' to achieve a natural attachment of attributes to
23927their corresponding declarations, whereas '#pragma GCC' is of use for
23928constructs that do not naturally form part of the grammar.  *Note
23929Pragmas Accepted by GCC: Pragmas.
23930
23931
23932File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
23933
239346.31 Attribute Syntax
23935=====================
23936
23937This section describes the syntax with which '__attribute__' may be
23938used, and the constructs to which attribute specifiers bind, for the C
23939language.  Some details may vary for C++ and Objective-C.  Because of
23940infelicities in the grammar for attributes, some forms described here
23941may not be successfully parsed in all cases.
23942
23943 There are some problems with the semantics of attributes in C++.  For
23944example, there are no manglings for attributes, although they may affect
23945code generation, so problems may arise when attributed types are used in
23946conjunction with templates or overloading.  Similarly, 'typeid' does not
23947distinguish between types with different attributes.  Support for
23948attributes in C++ may be restricted in future to attributes on
23949declarations only, but not on nested declarators.
23950
23951 *Note Function Attributes::, for details of the semantics of attributes
23952applying to functions.  *Note Variable Attributes::, for details of the
23953semantics of attributes applying to variables.  *Note Type Attributes::,
23954for details of the semantics of attributes applying to structure, union
23955and enumerated types.
23956
23957 An "attribute specifier" is of the form '__attribute__
23958((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
23959comma-separated sequence of "attributes", where each attribute is one of
23960the following:
23961
23962   * Empty.  Empty attributes are ignored.
23963
23964   * A word (which may be an identifier such as 'unused', or a reserved
23965     word such as 'const').
23966
23967   * A word, followed by, in parentheses, parameters for the attribute.
23968     These parameters take one of the following forms:
23969
23970        * An identifier.  For example, 'mode' attributes use this form.
23971
23972        * An identifier followed by a comma and a non-empty
23973          comma-separated list of expressions.  For example, 'format'
23974          attributes use this form.
23975
23976        * A possibly empty comma-separated list of expressions.  For
23977          example, 'format_arg' attributes use this form with the list
23978          being a single integer constant expression, and 'alias'
23979          attributes use this form with the list being a single string
23980          constant.
23981
23982 An "attribute specifier list" is a sequence of one or more attribute
23983specifiers, not separated by any other tokens.
23984
23985 In GNU C, an attribute specifier list may appear after the colon
23986following a label, other than a 'case' or 'default' label.  The only
23987attribute it makes sense to use after a label is 'unused'.  This feature
23988is intended for program-generated code that may contain unused labels,
23989but which is compiled with '-Wall'.  It is not normally appropriate to
23990use in it human-written code, though it could be useful in cases where
23991the code that jumps to the label is contained within an '#ifdef'
23992conditional.  GNU C++ only permits attributes on labels if the attribute
23993specifier is immediately followed by a semicolon (i.e., the label
23994applies to an empty statement).  If the semicolon is missing, C++ label
23995attributes are ambiguous, as it is permissible for a declaration, which
23996could begin with an attribute list, to be labelled in C++.  Declarations
23997cannot be labelled in C90 or C99, so the ambiguity does not arise there.
23998
23999 An attribute specifier list may appear as part of a 'struct', 'union'
24000or 'enum' specifier.  It may go either immediately after the 'struct',
24001'union' or 'enum' keyword, or after the closing brace.  The former
24002syntax is preferred.  Where attribute specifiers follow the closing
24003brace, they are considered to relate to the structure, union or
24004enumerated type defined, not to any enclosing declaration the type
24005specifier appears in, and the type defined is not complete until after
24006the attribute specifiers.
24007
24008 Otherwise, an attribute specifier appears as part of a declaration,
24009counting declarations of unnamed parameters and type names, and relates
24010to that declaration (which may be nested in another declaration, for
24011example in the case of a parameter declaration), or to a particular
24012declarator within a declaration.  Where an attribute specifier is
24013applied to a parameter declared as a function or an array, it should
24014apply to the function or array rather than the pointer to which the
24015parameter is implicitly converted, but this is not yet correctly
24016implemented.
24017
24018 Any list of specifiers and qualifiers at the start of a declaration may
24019contain attribute specifiers, whether or not such a list may in that
24020context contain storage class specifiers.  (Some attributes, however,
24021are essentially in the nature of storage class specifiers, and only make
24022sense where storage class specifiers may be used; for example,
24023'section'.)  There is one necessary limitation to this syntax: the first
24024old-style parameter declaration in a function definition cannot begin
24025with an attribute specifier, because such an attribute applies to the
24026function instead by syntax described below (which, however, is not yet
24027implemented in this case).  In some other cases, attribute specifiers
24028are permitted by this grammar but not yet supported by the compiler.
24029All attribute specifiers in this place relate to the declaration as a
24030whole.  In the obsolescent usage where a type of 'int' is implied by the
24031absence of type specifiers, such a list of specifiers and qualifiers may
24032be an attribute specifier list with no other specifiers or qualifiers.
24033
24034 At present, the first parameter in a function prototype must have some
24035type specifier that is not an attribute specifier; this resolves an
24036ambiguity in the interpretation of 'void f(int (__attribute__((foo))
24037x))', but is subject to change.  At present, if the parentheses of a
24038function declarator contain only attributes then those attributes are
24039ignored, rather than yielding an error or warning or implying a single
24040parameter of type int, but this is subject to change.
24041
24042 An attribute specifier list may appear immediately before a declarator
24043(other than the first) in a comma-separated list of declarators in a
24044declaration of more than one identifier using a single list of
24045specifiers and qualifiers.  Such attribute specifiers apply only to the
24046identifier before whose declarator they appear.  For example, in
24047
24048     __attribute__((noreturn)) void d0 (void),
24049         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
24050          d2 (void)
24051
24052the 'noreturn' attribute applies to all the functions declared; the
24053'format' attribute only applies to 'd1'.
24054
24055 An attribute specifier list may appear immediately before the comma,
24056'=' or semicolon terminating the declaration of an identifier other than
24057a function definition.  Such attribute specifiers apply to the declared
24058object or function.  Where an assembler name for an object or function
24059is specified (*note Asm Labels::), the attribute must follow the 'asm'
24060specification.
24061
24062 An attribute specifier list may, in future, be permitted to appear
24063after the declarator in a function definition (before any old-style
24064parameter declarations or the function body).
24065
24066 Attribute specifiers may be mixed with type qualifiers appearing inside
24067the '[]' of a parameter array declarator, in the C99 construct by which
24068such qualifiers are applied to the pointer to which the array is
24069implicitly converted.  Such attribute specifiers apply to the pointer,
24070not to the array, but at present this is not implemented and they are
24071ignored.
24072
24073 An attribute specifier list may appear at the start of a nested
24074declarator.  At present, there are some limitations in this usage: the
24075attributes correctly apply to the declarator, but for most individual
24076attributes the semantics this implies are not implemented.  When
24077attribute specifiers follow the '*' of a pointer declarator, they may be
24078mixed with any type qualifiers present.  The following describes the
24079formal semantics of this syntax.  It makes the most sense if you are
24080familiar with the formal specification of declarators in the ISO C
24081standard.
24082
24083 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
24084where 'T' contains declaration specifiers that specify a type TYPE (such
24085as 'int') and 'D1' is a declarator that contains an identifier IDENT.
24086The type specified for IDENT for derived declarators whose type does not
24087include an attribute specifier is as in the ISO C standard.
24088
24089 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
24090declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
24091for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
24092ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
24093
24094 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
24095and the declaration 'T D' specifies the type
24096"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
24097type "DERIVED-DECLARATOR-TYPE-LIST
24098TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
24099
24100 For example,
24101
24102     void (__attribute__((noreturn)) ****f) (void);
24103
24104specifies the type "pointer to pointer to pointer to pointer to
24105non-returning function returning 'void'".  As another example,
24106
24107     char *__attribute__((aligned(8))) *f;
24108
24109specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
24110again that this does not work with most attributes; for example, the
24111usage of 'aligned' and 'noreturn' attributes given above is not yet
24112supported.
24113
24114 For compatibility with existing code written for compiler versions that
24115did not implement attributes on nested declarators, some laxity is
24116allowed in the placing of attributes.  If an attribute that only applies
24117to types is applied to a declaration, it is treated as applying to the
24118type of that declaration.  If an attribute that only applies to
24119declarations is applied to the type of a declaration, it is treated as
24120applying to that declaration; and, for compatibility with code placing
24121the attributes immediately before the identifier declared, such an
24122attribute applied to a function return type is treated as applying to
24123the function type, and such an attribute applied to an array element
24124type is treated as applying to the array type.  If an attribute that
24125only applies to function types is applied to a pointer-to-function type,
24126it is treated as applying to the pointer target type; if such an
24127attribute is applied to a function return type that is not a
24128pointer-to-function type, it is treated as applying to the function
24129type.
24130
24131
24132File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
24133
241346.32 Prototypes and Old-Style Function Definitions
24135==================================================
24136
24137GNU C extends ISO C to allow a function prototype to override a later
24138old-style non-prototype definition.  Consider the following example:
24139
24140     /* Use prototypes unless the compiler is old-fashioned.  */
24141     #ifdef __STDC__
24142     #define P(x) x
24143     #else
24144     #define P(x) ()
24145     #endif
24146
24147     /* Prototype function declaration.  */
24148     int isroot P((uid_t));
24149
24150     /* Old-style function definition.  */
24151     int
24152     isroot (x)   /* ??? lossage here ??? */
24153          uid_t x;
24154     {
24155       return x == 0;
24156     }
24157
24158 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
24159this example, because subword arguments in old-style non-prototype
24160definitions are promoted.  Therefore in this example the function
24161definition's argument is really an 'int', which does not match the
24162prototype argument type of 'short'.
24163
24164 This restriction of ISO C makes it hard to write code that is portable
24165to traditional C compilers, because the programmer does not know whether
24166the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
24167these GNU C allows a prototype to override a later old-style definition.
24168More precisely, in GNU C, a function prototype argument type overrides
24169the argument type specified by a later old-style definition if the
24170former type is the same as the latter type before promotion.  Thus in
24171GNU C the above example is equivalent to the following:
24172
24173     int isroot (uid_t);
24174
24175     int
24176     isroot (uid_t x)
24177     {
24178       return x == 0;
24179     }
24180
24181GNU C++ does not support old-style function definitions, so this
24182extension is irrelevant.
24183
24184
24185File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
24186
241876.33 C++ Style Comments
24188=======================
24189
24190In GNU C, you may use C++ style comments, which start with '//' and
24191continue until the end of the line.  Many other C implementations allow
24192such comments, and they are included in the 1999 C standard.  However,
24193C++ style comments are not recognized if you specify an '-std' option
24194specifying a version of ISO C before C99, or '-ansi' (equivalent to
24195'-std=c90').
24196
24197
24198File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
24199
242006.34 Dollar Signs in Identifier Names
24201=====================================
24202
24203In GNU C, you may normally use dollar signs in identifier names.  This
24204is because many traditional C implementations allow such identifiers.
24205However, dollar signs in identifiers are not supported on a few target
24206machines, typically because the target assembler does not allow them.
24207
24208
24209File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
24210
242116.35 The Character <ESC> in Constants
24212=====================================
24213
24214You can use the sequence '\e' in a string or character constant to stand
24215for the ASCII character <ESC>.
24216
24217
24218File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
24219
242206.36 Specifying Attributes of Variables
24221=======================================
24222
24223The keyword '__attribute__' allows you to specify special attributes of
24224variables or structure fields.  This keyword is followed by an attribute
24225specification inside double parentheses.  Some attributes are currently
24226defined generically for variables.  Other attributes are defined for
24227variables on particular target systems.  Other attributes are available
24228for functions (*note Function Attributes::) and for types (*note Type
24229Attributes::).  Other front ends might define more attributes (*note
24230Extensions to the C++ Language: C++ Extensions.).
24231
24232 You may also specify attributes with '__' preceding and following each
24233keyword.  This allows you to use them in header files without being
24234concerned about a possible macro of the same name.  For example, you may
24235use '__aligned__' instead of 'aligned'.
24236
24237 *Note Attribute Syntax::, for details of the exact syntax for using
24238attributes.
24239
24240'aligned (ALIGNMENT)'
24241     This attribute specifies a minimum alignment for the variable or
24242     structure field, measured in bytes.  For example, the declaration:
24243
24244          int x __attribute__ ((aligned (16))) = 0;
24245
24246     causes the compiler to allocate the global variable 'x' on a
24247     16-byte boundary.  On a 68040, this could be used in conjunction
24248     with an 'asm' expression to access the 'move16' instruction which
24249     requires 16-byte aligned operands.
24250
24251     You can also specify the alignment of structure fields.  For
24252     example, to create a double-word aligned 'int' pair, you could
24253     write:
24254
24255          struct foo { int x[2] __attribute__ ((aligned (8))); };
24256
24257     This is an alternative to creating a union with a 'double' member,
24258     which forces the union to be double-word aligned.
24259
24260     As in the preceding examples, you can explicitly specify the
24261     alignment (in bytes) that you wish the compiler to use for a given
24262     variable or structure field.  Alternatively, you can leave out the
24263     alignment factor and just ask the compiler to align a variable or
24264     field to the default alignment for the target architecture you are
24265     compiling for.  The default alignment is sufficient for all scalar
24266     types, but may not be enough for all vector types on a target that
24267     supports vector operations.  The default alignment is fixed for a
24268     particular target ABI.
24269
24270     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
24271     which is the largest alignment ever used for any data type on the
24272     target machine you are compiling for.  For example, you could
24273     write:
24274
24275          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
24276
24277     The compiler automatically sets the alignment for the declared
24278     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
24279     make copy operations more efficient, because the compiler can use
24280     whatever instructions copy the biggest chunks of memory when
24281     performing copies to or from the variables or fields that you have
24282     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
24283     may change depending on command-line options.
24284
24285     When used on a struct, or struct member, the 'aligned' attribute
24286     can only increase the alignment; in order to decrease it, the
24287     'packed' attribute must be specified as well.  When used as part of
24288     a typedef, the 'aligned' attribute can both increase and decrease
24289     alignment, and specifying the 'packed' attribute generates a
24290     warning.
24291
24292     Note that the effectiveness of 'aligned' attributes may be limited
24293     by inherent limitations in your linker.  On many systems, the
24294     linker is only able to arrange for variables to be aligned up to a
24295     certain maximum alignment.  (For some linkers, the maximum
24296     supported alignment may be very very small.)  If your linker is
24297     only able to align variables up to a maximum of 8-byte alignment,
24298     then specifying 'aligned(16)' in an '__attribute__' still only
24299     provides you with 8-byte alignment.  See your linker documentation
24300     for further information.
24301
24302     The 'aligned' attribute can also be used for functions (*note
24303     Function Attributes::.)
24304
24305'cleanup (CLEANUP_FUNCTION)'
24306     The 'cleanup' attribute runs a function when the variable goes out
24307     of scope.  This attribute can only be applied to auto function
24308     scope variables; it may not be applied to parameters or variables
24309     with static storage duration.  The function must take one
24310     parameter, a pointer to a type compatible with the variable.  The
24311     return value of the function (if any) is ignored.
24312
24313     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
24314     the stack unwinding that happens during the processing of the
24315     exception.  Note that the 'cleanup' attribute does not allow the
24316     exception to be caught, only to perform an action.  It is undefined
24317     what happens if CLEANUP_FUNCTION does not return normally.
24318
24319'common'
24320'nocommon'
24321     The 'common' attribute requests GCC to place a variable in "common"
24322     storage.  The 'nocommon' attribute requests the opposite--to
24323     allocate space for it directly.
24324
24325     These attributes override the default chosen by the '-fno-common'
24326     and '-fcommon' flags respectively.
24327
24328'deprecated'
24329'deprecated (MSG)'
24330     The 'deprecated' attribute results in a warning if the variable is
24331     used anywhere in the source file.  This is useful when identifying
24332     variables that are expected to be removed in a future version of a
24333     program.  The warning also includes the location of the declaration
24334     of the deprecated variable, to enable users to easily find further
24335     information about why the variable is deprecated, or what they
24336     should do instead.  Note that the warning only occurs for uses:
24337
24338          extern int old_var __attribute__ ((deprecated));
24339          extern int old_var;
24340          int new_fn () { return old_var; }
24341
24342     results in a warning on line 3 but not line 2.  The optional MSG
24343     argument, which must be a string, is printed in the warning if
24344     present.
24345
24346     The 'deprecated' attribute can also be used for functions and types
24347     (*note Function Attributes::, *note Type Attributes::.)
24348
24349'mode (MODE)'
24350     This attribute specifies the data type for the
24351     declaration--whichever type corresponds to the mode MODE.  This in
24352     effect lets you request an integer or floating-point type according
24353     to its width.
24354
24355     You may also specify a mode of 'byte' or '__byte__' to indicate the
24356     mode corresponding to a one-byte integer, 'word' or '__word__' for
24357     the mode of a one-word integer, and 'pointer' or '__pointer__' for
24358     the mode used to represent pointers.
24359
24360'packed'
24361     The 'packed' attribute specifies that a variable or structure field
24362     should have the smallest possible alignment--one byte for a
24363     variable, and one bit for a field, unless you specify a larger
24364     value with the 'aligned' attribute.
24365
24366     Here is a structure in which the field 'x' is packed, so that it
24367     immediately follows 'a':
24368
24369          struct foo
24370          {
24371            char a;
24372            int x[2] __attribute__ ((packed));
24373          };
24374
24375     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
24376     attribute on bit-fields of type 'char'.  This has been fixed in GCC
24377     4.4 but the change can lead to differences in the structure layout.
24378     See the documentation of '-Wpacked-bitfield-compat' for more
24379     information.
24380
24381'section ("SECTION-NAME")'
24382     Normally, the compiler places the objects it generates in sections
24383     like 'data' and 'bss'.  Sometimes, however, you need additional
24384     sections, or you need certain particular variables to appear in
24385     special sections, for example to map to special hardware.  The
24386     'section' attribute specifies that a variable (or function) lives
24387     in a particular section.  For example, this small program uses
24388     several specific section names:
24389
24390          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
24391          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
24392          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
24393          int init_data __attribute__ ((section ("INITDATA")));
24394
24395          main()
24396          {
24397            /* Initialize stack pointer */
24398            init_sp (stack + sizeof (stack));
24399
24400            /* Initialize initialized data */
24401            memcpy (&init_data, &data, &edata - &data);
24402
24403            /* Turn on the serial ports */
24404            init_duart (&a);
24405            init_duart (&b);
24406          }
24407
24408     Use the 'section' attribute with _global_ variables and not _local_
24409     variables, as shown in the example.
24410
24411     You may use the 'section' attribute with initialized or
24412     uninitialized global variables but the linker requires each object
24413     be defined once, with the exception that uninitialized variables
24414     tentatively go in the 'common' (or 'bss') section and can be
24415     multiply "defined".  Using the 'section' attribute changes what
24416     section the variable goes into and may cause the linker to issue an
24417     error if an uninitialized variable has multiple definitions.  You
24418     can force a variable to be initialized with the '-fno-common' flag
24419     or the 'nocommon' attribute.
24420
24421     Some file formats do not support arbitrary sections so the
24422     'section' attribute is not available on all platforms.  If you need
24423     to map the entire contents of a module to a particular section,
24424     consider using the facilities of the linker instead.
24425
24426'shared'
24427     On Microsoft Windows, in addition to putting variable definitions
24428     in a named section, the section can also be shared among all
24429     running copies of an executable or DLL.  For example, this small
24430     program defines shared data by putting it in a named section
24431     'shared' and marking the section shareable:
24432
24433          int foo __attribute__((section ("shared"), shared)) = 0;
24434
24435          int
24436          main()
24437          {
24438            /* Read and write foo.  All running
24439               copies see the same value.  */
24440            return 0;
24441          }
24442
24443     You may only use the 'shared' attribute along with 'section'
24444     attribute with a fully-initialized global definition because of the
24445     way linkers work.  See 'section' attribute for more information.
24446
24447     The 'shared' attribute is only available on Microsoft Windows.
24448
24449'tls_model ("TLS_MODEL")'
24450     The 'tls_model' attribute sets thread-local storage model (*note
24451     Thread-Local::) of a particular '__thread' variable, overriding
24452     '-ftls-model=' command-line switch on a per-variable basis.  The
24453     TLS_MODEL argument should be one of 'global-dynamic',
24454     'local-dynamic', 'initial-exec' or 'local-exec'.
24455
24456     Not all targets support this attribute.
24457
24458'unused'
24459     This attribute, attached to a variable, means that the variable is
24460     meant to be possibly unused.  GCC does not produce a warning for
24461     this variable.
24462
24463'used'
24464     This attribute, attached to a variable, means that the variable
24465     must be emitted even if it appears that the variable is not
24466     referenced.
24467
24468     When applied to a static data member of a C++ class template, the
24469     attribute also means that the member is instantiated if the class
24470     itself is instantiated.
24471
24472'vector_size (BYTES)'
24473     This attribute specifies the vector size for the variable, measured
24474     in bytes.  For example, the declaration:
24475
24476          int foo __attribute__ ((vector_size (16)));
24477
24478     causes the compiler to set the mode for 'foo', to be 16 bytes,
24479     divided into 'int' sized units.  Assuming a 32-bit int (a vector of
24480     4 units of 4 bytes), the corresponding mode of 'foo' is V4SI.
24481
24482     This attribute is only applicable to integral and float scalars,
24483     although arrays, pointers, and function return values are allowed
24484     in conjunction with this construct.
24485
24486     Aggregates with this attribute are invalid, even if they are of the
24487     same size as a corresponding scalar.  For example, the declaration:
24488
24489          struct S { int a; };
24490          struct S  __attribute__ ((vector_size (16))) foo;
24491
24492     is invalid even if the size of the structure is the same as the
24493     size of the 'int'.
24494
24495'selectany'
24496     The 'selectany' attribute causes an initialized global variable to
24497     have link-once semantics.  When multiple definitions of the
24498     variable are encountered by the linker, the first is selected and
24499     the remainder are discarded.  Following usage by the Microsoft
24500     compiler, the linker is told _not_ to warn about size or content
24501     differences of the multiple definitions.
24502
24503     Although the primary usage of this attribute is for POD types, the
24504     attribute can also be applied to global C++ objects that are
24505     initialized by a constructor.  In this case, the static
24506     initialization and destruction code for the object is emitted in
24507     each translation defining the object, but the calls to the
24508     constructor and destructor are protected by a link-once guard
24509     variable.
24510
24511     The 'selectany' attribute is only available on Microsoft Windows
24512     targets.  You can use '__declspec (selectany)' as a synonym for
24513     '__attribute__ ((selectany))' for compatibility with other
24514     compilers.
24515
24516'weak'
24517     The 'weak' attribute is described in *note Function Attributes::.
24518
24519'dllimport'
24520     The 'dllimport' attribute is described in *note Function
24521     Attributes::.
24522
24523'dllexport'
24524     The 'dllexport' attribute is described in *note Function
24525     Attributes::.
24526
245276.36.1 AVR Variable Attributes
24528------------------------------
24529
24530'progmem'
24531     The 'progmem' attribute is used on the AVR to place read-only data
24532     in the non-volatile program memory (flash).  The 'progmem'
24533     attribute accomplishes this by putting respective variables into a
24534     section whose name starts with '.progmem'.
24535
24536     This attribute works similar to the 'section' attribute but adds
24537     additional checking.  Notice that just like the 'section'
24538     attribute, 'progmem' affects the location of the data but not how
24539     this data is accessed.
24540
24541     In order to read data located with the 'progmem' attribute (inline)
24542     assembler must be used.
24543          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
24544          #include <avr/pgmspace.h>
24545
24546          /* Locate var in flash memory */
24547          const int var[2] PROGMEM = { 1, 2 };
24548
24549          int read_var (int i)
24550          {
24551              /* Access var[] by accessor macro from avr/pgmspace.h */
24552              return (int) pgm_read_word (& var[i]);
24553          }
24554
24555     AVR is a Harvard architecture processor and data and read-only data
24556     normally resides in the data memory (RAM).
24557
24558     See also the *note AVR Named Address Spaces:: section for an
24559     alternate way to locate and access data in flash memory.
24560
245616.36.2 Blackfin Variable Attributes
24562-----------------------------------
24563
24564Three attributes are currently defined for the Blackfin.
24565
24566'l1_data'
24567'l1_data_A'
24568'l1_data_B'
24569     Use these attributes on the Blackfin to place the variable into L1
24570     Data SRAM. Variables with 'l1_data' attribute are put into the
24571     specific section named '.l1.data'.  Those with 'l1_data_A'
24572     attribute are put into the specific section named '.l1.data.A'.
24573     Those with 'l1_data_B' attribute are put into the specific section
24574     named '.l1.data.B'.
24575
24576'l2'
24577     Use this attribute on the Blackfin to place the variable into L2
24578     SRAM. Variables with 'l2' attribute are put into the specific
24579     section named '.l2.data'.
24580
245816.36.3 M32R/D Variable Attributes
24582---------------------------------
24583
24584One attribute is currently defined for the M32R/D.
24585
24586'model (MODEL-NAME)'
24587     Use this attribute on the M32R/D to set the addressability of an
24588     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
24589     'large', representing each of the code models.
24590
24591     Small model objects live in the lower 16MB of memory (so that their
24592     addresses can be loaded with the 'ld24' instruction).
24593
24594     Medium and large model objects may live anywhere in the 32-bit
24595     address space (the compiler generates 'seth/add3' instructions to
24596     load their addresses).
24597
245986.36.4 MeP Variable Attributes
24599------------------------------
24600
24601The MeP target has a number of addressing modes and busses.  The 'near'
24602space spans the standard memory space's first 16 megabytes (24 bits).
24603The 'far' space spans the entire 32-bit memory space.  The 'based' space
24604is a 128-byte region in the memory space that is addressed relative to
24605the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
24606the '$gp' register.  In addition to these memory regions, the MeP target
24607has a separate 16-bit control bus which is specified with 'cb'
24608attributes.
24609
24610'based'
24611     Any variable with the 'based' attribute is assigned to the '.based'
24612     section, and is accessed with relative to the '$tp' register.
24613
24614'tiny'
24615     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
24616     section, relative to the '$gp' register.
24617
24618'near'
24619     Variables with the 'near' attribute are assumed to have addresses
24620     that fit in a 24-bit addressing mode.  This is the default for
24621     large variables ('-mtiny=4' is the default) but this attribute can
24622     override '-mtiny=' for small variables, or override '-ml'.
24623
24624'far'
24625     Variables with the 'far' attribute are addressed using a full
24626     32-bit address.  Since this covers the entire memory space, this
24627     allows modules to make no assumptions about where variables might
24628     be stored.
24629
24630'io'
24631'io (ADDR)'
24632     Variables with the 'io' attribute are used to address memory-mapped
24633     peripherals.  If an address is specified, the variable is assigned
24634     that address, else it is not assigned an address (it is assumed
24635     some other module assigns an address).  Example:
24636
24637          int timer_count __attribute__((io(0x123)));
24638
24639'cb'
24640'cb (ADDR)'
24641     Variables with the 'cb' attribute are used to access the control
24642     bus, using special instructions.  'addr' indicates the control bus
24643     address.  Example:
24644
24645          int cpu_clock __attribute__((cb(0x123)));
24646
246476.36.5 i386 Variable Attributes
24648-------------------------------
24649
24650Two attributes are currently defined for i386 configurations:
24651'ms_struct' and 'gcc_struct'
24652
24653'ms_struct'
24654'gcc_struct'
24655
24656     If 'packed' is used on a structure, or if bit-fields are used, it
24657     may be that the Microsoft ABI lays out the structure differently
24658     than the way GCC normally does.  Particularly when moving packed
24659     data between functions compiled with GCC and the native Microsoft
24660     compiler (either via function call or as data in a file), it may be
24661     necessary to access either format.
24662
24663     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
24664     Windows X86 compilers to match the native Microsoft compiler.
24665
24666     The Microsoft structure layout algorithm is fairly simple with the
24667     exception of the bit-field packing.  The padding and alignment of
24668     members of structures and whether a bit-field can straddle a
24669     storage-unit boundary are determine by these rules:
24670
24671       1. Structure members are stored sequentially in the order in
24672          which they are declared: the first member has the lowest
24673          memory address and the last member the highest.
24674
24675       2. Every data object has an alignment requirement.  The alignment
24676          requirement for all data except structures, unions, and arrays
24677          is either the size of the object or the current packing size
24678          (specified with either the 'aligned' attribute or the 'pack'
24679          pragma), whichever is less.  For structures, unions, and
24680          arrays, the alignment requirement is the largest alignment
24681          requirement of its members.  Every object is allocated an
24682          offset so that:
24683
24684               offset % alignment_requirement == 0
24685
24686       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
24687          allocation unit if the integral types are the same size and if
24688          the next bit-field fits into the current allocation unit
24689          without crossing the boundary imposed by the common alignment
24690          requirements of the bit-fields.
24691
24692     MSVC interprets zero-length bit-fields in the following ways:
24693
24694       1. If a zero-length bit-field is inserted between two bit-fields
24695          that are normally coalesced, the bit-fields are not coalesced.
24696
24697          For example:
24698
24699               struct
24700                {
24701                  unsigned long bf_1 : 12;
24702                  unsigned long : 0;
24703                  unsigned long bf_2 : 12;
24704                } t1;
24705
24706          The size of 't1' is 8 bytes with the zero-length bit-field.
24707          If the zero-length bit-field were removed, 't1''s size would
24708          be 4 bytes.
24709
24710       2. If a zero-length bit-field is inserted after a bit-field,
24711          'foo', and the alignment of the zero-length bit-field is
24712          greater than the member that follows it, 'bar', 'bar' is
24713          aligned as the type of the zero-length bit-field.
24714
24715          For example:
24716
24717               struct
24718                {
24719                  char foo : 4;
24720                  short : 0;
24721                  char bar;
24722                } t2;
24723
24724               struct
24725                {
24726                  char foo : 4;
24727                  short : 0;
24728                  double bar;
24729                } t3;
24730
24731          For 't2', 'bar' is placed at offset 2, rather than offset 1.
24732          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
24733          bit-field does not affect the alignment of 'bar' or, as a
24734          result, the size of the structure.
24735
24736          Taking this into account, it is important to note the
24737          following:
24738
24739            1. If a zero-length bit-field follows a normal bit-field,
24740               the type of the zero-length bit-field may affect the
24741               alignment of the structure as whole.  For example, 't2'
24742               has a size of 4 bytes, since the zero-length bit-field
24743               follows a normal bit-field, and is of type short.
24744
24745            2. Even if a zero-length bit-field is not followed by a
24746               normal bit-field, it may still affect the alignment of
24747               the structure:
24748
24749                    struct
24750                     {
24751                       char foo : 6;
24752                       long : 0;
24753                     } t4;
24754
24755               Here, 't4' takes up 4 bytes.
24756
24757       3. Zero-length bit-fields following non-bit-field members are
24758          ignored:
24759
24760               struct
24761                {
24762                  char foo;
24763                  long : 0;
24764                  char bar;
24765                } t5;
24766
24767          Here, 't5' takes up 2 bytes.
24768
247696.36.6 PowerPC Variable Attributes
24770----------------------------------
24771
24772Three attributes currently are defined for PowerPC configurations:
24773'altivec', 'ms_struct' and 'gcc_struct'.
24774
24775 For full documentation of the struct attributes please see the
24776documentation in *note i386 Variable Attributes::.
24777
24778 For documentation of 'altivec' attribute please see the documentation
24779in *note PowerPC Type Attributes::.
24780
247816.36.7 SPU Variable Attributes
24782------------------------------
24783
24784The SPU supports the 'spu_vector' attribute for variables.  For
24785documentation of this attribute please see the documentation in *note
24786SPU Type Attributes::.
24787
247886.36.8 Xstormy16 Variable Attributes
24789------------------------------------
24790
24791One attribute is currently defined for xstormy16 configurations:
24792'below100'.
24793
24794'below100'
24795
24796     If a variable has the 'below100' attribute ('BELOW100' is allowed
24797     also), GCC places the variable in the first 0x100 bytes of memory
24798     and use special opcodes to access it.  Such variables are placed in
24799     either the '.bss_below100' section or the '.data_below100' section.
24800
24801
24802File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
24803
248046.37 Specifying Attributes of Types
24805===================================
24806
24807The keyword '__attribute__' allows you to specify special attributes of
24808'struct' and 'union' types when you define such types.  This keyword is
24809followed by an attribute specification inside double parentheses.  Seven
24810attributes are currently defined for types: 'aligned', 'packed',
24811'transparent_union', 'unused', 'deprecated', 'visibility', and
24812'may_alias'.  Other attributes are defined for functions (*note Function
24813Attributes::) and for variables (*note Variable Attributes::).
24814
24815 You may also specify any one of these attributes with '__' preceding
24816and following its keyword.  This allows you to use these attributes in
24817header files without being concerned about a possible macro of the same
24818name.  For example, you may use '__aligned__' instead of 'aligned'.
24819
24820 You may specify type attributes in an enum, struct or union type
24821declaration or definition, or for other types in a 'typedef'
24822declaration.
24823
24824 For an enum, struct or union type, you may specify attributes either
24825between the enum, struct or union tag and the name of the type, or just
24826past the closing curly brace of the _definition_.  The former syntax is
24827preferred.
24828
24829 *Note Attribute Syntax::, for details of the exact syntax for using
24830attributes.
24831
24832'aligned (ALIGNMENT)'
24833     This attribute specifies a minimum alignment (in bytes) for
24834     variables of the specified type.  For example, the declarations:
24835
24836          struct S { short f[3]; } __attribute__ ((aligned (8)));
24837          typedef int more_aligned_int __attribute__ ((aligned (8)));
24838
24839     force the compiler to ensure (as far as it can) that each variable
24840     whose type is 'struct S' or 'more_aligned_int' is allocated and
24841     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
24842     variables of type 'struct S' aligned to 8-byte boundaries allows
24843     the compiler to use the 'ldd' and 'std' (doubleword load and store)
24844     instructions when copying one variable of type 'struct S' to
24845     another, thus improving run-time efficiency.
24846
24847     Note that the alignment of any given 'struct' or 'union' type is
24848     required by the ISO C standard to be at least a perfect multiple of
24849     the lowest common multiple of the alignments of all of the members
24850     of the 'struct' or 'union' in question.  This means that you _can_
24851     effectively adjust the alignment of a 'struct' or 'union' type by
24852     attaching an 'aligned' attribute to any one of the members of such
24853     a type, but the notation illustrated in the example above is a more
24854     obvious, intuitive, and readable way to request the compiler to
24855     adjust the alignment of an entire 'struct' or 'union' type.
24856
24857     As in the preceding example, you can explicitly specify the
24858     alignment (in bytes) that you wish the compiler to use for a given
24859     'struct' or 'union' type.  Alternatively, you can leave out the
24860     alignment factor and just ask the compiler to align a type to the
24861     maximum useful alignment for the target machine you are compiling
24862     for.  For example, you could write:
24863
24864          struct S { short f[3]; } __attribute__ ((aligned));
24865
24866     Whenever you leave out the alignment factor in an 'aligned'
24867     attribute specification, the compiler automatically sets the
24868     alignment for the type to the largest alignment that is ever used
24869     for any data type on the target machine you are compiling for.
24870     Doing this can often make copy operations more efficient, because
24871     the compiler can use whatever instructions copy the biggest chunks
24872     of memory when performing copies to or from the variables that have
24873     types that you have aligned this way.
24874
24875     In the example above, if the size of each 'short' is 2 bytes, then
24876     the size of the entire 'struct S' type is 6 bytes.  The smallest
24877     power of two that is greater than or equal to that is 8, so the
24878     compiler sets the alignment for the entire 'struct S' type to 8
24879     bytes.
24880
24881     Note that although you can ask the compiler to select a
24882     time-efficient alignment for a given type and then declare only
24883     individual stand-alone objects of that type, the compiler's ability
24884     to select a time-efficient alignment is primarily useful only when
24885     you plan to create arrays of variables having the relevant
24886     (efficiently aligned) type.  If you declare or use arrays of
24887     variables of an efficiently-aligned type, then it is likely that
24888     your program also does pointer arithmetic (or subscripting, which
24889     amounts to the same thing) on pointers to the relevant type, and
24890     the code that the compiler generates for these pointer arithmetic
24891     operations is often more efficient for efficiently-aligned types
24892     than for other types.
24893
24894     The 'aligned' attribute can only increase the alignment; but you
24895     can decrease it by specifying 'packed' as well.  See below.
24896
24897     Note that the effectiveness of 'aligned' attributes may be limited
24898     by inherent limitations in your linker.  On many systems, the
24899     linker is only able to arrange for variables to be aligned up to a
24900     certain maximum alignment.  (For some linkers, the maximum
24901     supported alignment may be very very small.)  If your linker is
24902     only able to align variables up to a maximum of 8-byte alignment,
24903     then specifying 'aligned(16)' in an '__attribute__' still only
24904     provides you with 8-byte alignment.  See your linker documentation
24905     for further information.
24906
24907'packed'
24908     This attribute, attached to 'struct' or 'union' type definition,
24909     specifies that each member (other than zero-width bit-fields) of
24910     the structure or union is placed to minimize the memory required.
24911     When attached to an 'enum' definition, it indicates that the
24912     smallest integral type should be used.
24913
24914     Specifying this attribute for 'struct' and 'union' types is
24915     equivalent to specifying the 'packed' attribute on each of the
24916     structure or union members.  Specifying the '-fshort-enums' flag on
24917     the line is equivalent to specifying the 'packed' attribute on all
24918     'enum' definitions.
24919
24920     In the following example 'struct my_packed_struct''s members are
24921     packed closely together, but the internal layout of its 's' member
24922     is not packed--to do that, 'struct my_unpacked_struct' needs to be
24923     packed too.
24924
24925          struct my_unpacked_struct
24926           {
24927              char c;
24928              int i;
24929           };
24930
24931          struct __attribute__ ((__packed__)) my_packed_struct
24932            {
24933               char c;
24934               int  i;
24935               struct my_unpacked_struct s;
24936            };
24937
24938     You may only specify this attribute on the definition of an 'enum',
24939     'struct' or 'union', not on a 'typedef' that does not also define
24940     the enumerated type, structure or union.
24941
24942'transparent_union'
24943     This attribute, attached to a 'union' type definition, indicates
24944     that any function parameter having that union type causes calls to
24945     that function to be treated in a special way.
24946
24947     First, the argument corresponding to a transparent union type can
24948     be of any type in the union; no cast is required.  Also, if the
24949     union contains a pointer type, the corresponding argument can be a
24950     null pointer constant or a void pointer expression; and if the
24951     union contains a void pointer type, the corresponding argument can
24952     be any pointer expression.  If the union member type is a pointer,
24953     qualifiers like 'const' on the referenced type must be respected,
24954     just as with normal pointer conversions.
24955
24956     Second, the argument is passed to the function using the calling
24957     conventions of the first member of the transparent union, not the
24958     calling conventions of the union itself.  All members of the union
24959     must have the same machine representation; this is necessary for
24960     this argument passing to work properly.
24961
24962     Transparent unions are designed for library functions that have
24963     multiple interfaces for compatibility reasons.  For example,
24964     suppose the 'wait' function must accept either a value of type 'int
24965     *' to comply with POSIX, or a value of type 'union wait *' to
24966     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
24967     *', 'wait' would accept both kinds of arguments, but it would also
24968     accept any other pointer type and this would make argument type
24969     checking less useful.  Instead, '<sys/wait.h>' might define the
24970     interface as follows:
24971
24972          typedef union __attribute__ ((__transparent_union__))
24973            {
24974              int *__ip;
24975              union wait *__up;
24976            } wait_status_ptr_t;
24977
24978          pid_t wait (wait_status_ptr_t);
24979
24980     This interface allows either 'int *' or 'union wait *' arguments to
24981     be passed, using the 'int *' calling convention.  The program can
24982     call 'wait' with arguments of either type:
24983
24984          int w1 () { int w; return wait (&w); }
24985          int w2 () { union wait w; return wait (&w); }
24986
24987     With this interface, 'wait''s implementation might look like this:
24988
24989          pid_t wait (wait_status_ptr_t p)
24990          {
24991            return waitpid (-1, p.__ip, 0);
24992          }
24993
24994'unused'
24995     When attached to a type (including a 'union' or a 'struct'), this
24996     attribute means that variables of that type are meant to appear
24997     possibly unused.  GCC does not produce a warning for any variables
24998     of that type, even if the variable appears to do nothing.  This is
24999     often the case with lock or thread classes, which are usually
25000     defined and then not referenced, but contain constructors and
25001     destructors that have nontrivial bookkeeping functions.
25002
25003'deprecated'
25004'deprecated (MSG)'
25005     The 'deprecated' attribute results in a warning if the type is used
25006     anywhere in the source file.  This is useful when identifying types
25007     that are expected to be removed in a future version of a program.
25008     If possible, the warning also includes the location of the
25009     declaration of the deprecated type, to enable users to easily find
25010     further information about why the type is deprecated, or what they
25011     should do instead.  Note that the warnings only occur for uses and
25012     then only if the type is being applied to an identifier that itself
25013     is not being declared as deprecated.
25014
25015          typedef int T1 __attribute__ ((deprecated));
25016          T1 x;
25017          typedef T1 T2;
25018          T2 y;
25019          typedef T1 T3 __attribute__ ((deprecated));
25020          T3 z __attribute__ ((deprecated));
25021
25022     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
25023     warning is issued for line 4 because T2 is not explicitly
25024     deprecated.  Line 5 has no warning because T3 is explicitly
25025     deprecated.  Similarly for line 6.  The optional MSG argument,
25026     which must be a string, is printed in the warning if present.
25027
25028     The 'deprecated' attribute can also be used for functions and
25029     variables (*note Function Attributes::, *note Variable
25030     Attributes::.)
25031
25032'may_alias'
25033     Accesses through pointers to types with this attribute are not
25034     subject to type-based alias analysis, but are instead assumed to be
25035     able to alias any other type of objects.  In the context of section
25036     6.5 paragraph 7 of the C99 standard, an lvalue expression
25037     dereferencing such a pointer is treated like having a character
25038     type.  See '-fstrict-aliasing' for more information on aliasing
25039     issues.  This extension exists to support some vector APIs, in
25040     which pointers to one vector type are permitted to alias pointers
25041     to a different vector type.
25042
25043     Note that an object of a type with this attribute does not have any
25044     special semantics.
25045
25046     Example of use:
25047
25048          typedef short __attribute__((__may_alias__)) short_a;
25049
25050          int
25051          main (void)
25052          {
25053            int a = 0x12345678;
25054            short_a *b = (short_a *) &a;
25055
25056            b[1] = 0;
25057
25058            if (a == 0x12345678)
25059              abort();
25060
25061            exit(0);
25062          }
25063
25064     If you replaced 'short_a' with 'short' in the variable declaration,
25065     the above program would abort when compiled with
25066     '-fstrict-aliasing', which is on by default at '-O2' or above in
25067     recent GCC versions.
25068
25069'visibility'
25070     In C++, attribute visibility (*note Function Attributes::) can also
25071     be applied to class, struct, union and enum types.  Unlike other
25072     type attributes, the attribute must appear between the initial
25073     keyword and the name of the type; it cannot appear after the body
25074     of the type.
25075
25076     Note that the type visibility is applied to vague linkage entities
25077     associated with the class (vtable, typeinfo node, etc.).  In
25078     particular, if a class is thrown as an exception in one shared
25079     object and caught in another, the class must have default
25080     visibility.  Otherwise the two shared objects are unable to use the
25081     same typeinfo node and exception handling will break.
25082
25083 To specify multiple attributes, separate them by commas within the
25084double parentheses: for example, '__attribute__ ((aligned (16),
25085packed))'.
25086
250876.37.1 ARM Type Attributes
25088--------------------------
25089
25090On those ARM targets that support 'dllimport' (such as Symbian OS), you
25091can use the 'notshared' attribute to indicate that the virtual table and
25092other similar data for a class should not be exported from a DLL.  For
25093example:
25094
25095     class __declspec(notshared) C {
25096     public:
25097       __declspec(dllimport) C();
25098       virtual void f();
25099     }
25100
25101     __declspec(dllexport)
25102     C::C() {}
25103
25104In this code, 'C::C' is exported from the current DLL, but the virtual
25105table for 'C' is not exported.  (You can use '__attribute__' instead of
25106'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
25107
251086.37.2 MeP Type Attributes
25109--------------------------
25110
25111Many of the MeP variable attributes may be applied to types as well.
25112Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
25113applied to either.  The 'io' and 'cb' attributes may not be applied to
25114types.
25115
251166.37.3 i386 Type Attributes
25117---------------------------
25118
25119Two attributes are currently defined for i386 configurations:
25120'ms_struct' and 'gcc_struct'.
25121
25122'ms_struct'
25123'gcc_struct'
25124
25125     If 'packed' is used on a structure, or if bit-fields are used it
25126     may be that the Microsoft ABI packs them differently than GCC
25127     normally packs them.  Particularly when moving packed data between
25128     functions compiled with GCC and the native Microsoft compiler
25129     (either via function call or as data in a file), it may be
25130     necessary to access either format.
25131
25132     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
25133     Windows X86 compilers to match the native Microsoft compiler.
25134
251356.37.4 PowerPC Type Attributes
25136------------------------------
25137
25138Three attributes currently are defined for PowerPC configurations:
25139'altivec', 'ms_struct' and 'gcc_struct'.
25140
25141 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
25142please see the documentation in *note i386 Type Attributes::.
25143
25144 The 'altivec' attribute allows one to declare AltiVec vector data types
25145supported by the AltiVec Programming Interface Manual.  The attribute
25146requires an argument to specify one of three vector types: 'vector__',
25147'pixel__' (always followed by unsigned short), and 'bool__' (always
25148followed by unsigned).
25149
25150     __attribute__((altivec(vector__)))
25151     __attribute__((altivec(pixel__))) unsigned short
25152     __attribute__((altivec(bool__))) unsigned
25153
25154 These attributes mainly are intended to support the '__vector',
25155'__pixel', and '__bool' AltiVec keywords.
25156
251576.37.5 SPU Type Attributes
25158--------------------------
25159
25160The SPU supports the 'spu_vector' attribute for types.  This attribute
25161allows one to declare vector data types supported by the
25162Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
25163to support the '__vector' keyword.
25164
25165
25166File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
25167
251686.38 Inquiring on Alignment of Types or Variables
25169=================================================
25170
25171The keyword '__alignof__' allows you to inquire about how an object is
25172aligned, or the minimum alignment usually required by a type.  Its
25173syntax is just like 'sizeof'.
25174
25175 For example, if the target machine requires a 'double' value to be
25176aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
25177is true on many RISC machines.  On more traditional machine designs,
25178'__alignof__ (double)' is 4 or even 2.
25179
25180 Some machines never actually require alignment; they allow reference to
25181any data type even at an odd address.  For these machines, '__alignof__'
25182reports the smallest alignment that GCC gives the data type, usually as
25183mandated by the target ABI.
25184
25185 If the operand of '__alignof__' is an lvalue rather than a type, its
25186value is the required alignment for its type, taking into account any
25187minimum alignment specified with GCC's '__attribute__' extension (*note
25188Variable Attributes::).  For example, after this declaration:
25189
25190     struct foo { int x; char y; } foo1;
25191
25192the value of '__alignof__ (foo1.y)' is 1, even though its actual
25193alignment is probably 2 or 4, the same as '__alignof__ (int)'.
25194
25195 It is an error to ask for the alignment of an incomplete type.
25196
25197
25198File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
25199
252006.39 An Inline Function is As Fast As a Macro
25201=============================================
25202
25203By declaring a function inline, you can direct GCC to make calls to that
25204function faster.  One way GCC can achieve this is to integrate that
25205function's code into the code for its callers.  This makes execution
25206faster by eliminating the function-call overhead; in addition, if any of
25207the actual argument values are constant, their known values may permit
25208simplifications at compile time so that not all of the inline function's
25209code needs to be included.  The effect on code size is less predictable;
25210object code may be larger or smaller with function inlining, depending
25211on the particular case.  You can also direct GCC to try to integrate all
25212"simple enough" functions into their callers with the option
25213'-finline-functions'.
25214
25215 GCC implements three different semantics of declaring a function
25216inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
25217'gnu_inline' attribute is present on all inline declarations, another
25218when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without
25219'-fgnu89-inline'), and the third is used when compiling C++.
25220
25221 To declare a function inline, use the 'inline' keyword in its
25222declaration, like this:
25223
25224     static inline int
25225     inc (int *a)
25226     {
25227       return (*a)++;
25228     }
25229
25230 If you are writing a header file to be included in ISO C90 programs,
25231write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
25232
25233 The three types of inlining behave similarly in two important cases:
25234when the 'inline' keyword is used on a 'static' function, like the
25235example above, and when a function is first declared without using the
25236'inline' keyword and then is defined with 'inline', like this:
25237
25238     extern int inc (int *a);
25239     inline int
25240     inc (int *a)
25241     {
25242       return (*a)++;
25243     }
25244
25245 In both of these common cases, the program behaves the same as if you
25246had not used the 'inline' keyword, except for its speed.
25247
25248 When a function is both inline and 'static', if all calls to the
25249function are integrated into the caller, and the function's address is
25250never used, then the function's own assembler code is never referenced.
25251In this case, GCC does not actually output assembler code for the
25252function, unless you specify the option '-fkeep-inline-functions'.  Some
25253calls cannot be integrated for various reasons (in particular, calls
25254that precede the function's definition cannot be integrated, and neither
25255can recursive calls within the definition).  If there is a nonintegrated
25256call, then the function is compiled to assembler code as usual.  The
25257function must also be compiled as usual if the program refers to its
25258address, because that can't be inlined.
25259
25260 Note that certain usages in a function definition can make it
25261unsuitable for inline substitution.  Among these usages are: variadic
25262functions, use of 'alloca', use of variable-length data types (*note
25263Variable Length::), use of computed goto (*note Labels as Values::), use
25264of nonlocal goto, and nested functions (*note Nested Functions::).
25265Using '-Winline' warns when a function marked 'inline' could not be
25266substituted, and gives the reason for the failure.
25267
25268 As required by ISO C++, GCC considers member functions defined within
25269the body of a class to be marked inline even if they are not explicitly
25270declared with the 'inline' keyword.  You can override this with
25271'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
25272Dialect Options.
25273
25274 GCC does not inline any functions when not optimizing unless you
25275specify the 'always_inline' attribute for the function, like this:
25276
25277     /* Prototype.  */
25278     inline void foo (const char) __attribute__((always_inline));
25279
25280 The remainder of this section is specific to GNU C90 inlining.
25281
25282 When an inline function is not 'static', then the compiler must assume
25283that there may be calls from other source files; since a global symbol
25284can be defined only once in any program, the function must not be
25285defined in the other source files, so the calls therein cannot be
25286integrated.  Therefore, a non-'static' inline function is always
25287compiled on its own in the usual fashion.
25288
25289 If you specify both 'inline' and 'extern' in the function definition,
25290then the definition is used only for inlining.  In no case is the
25291function compiled on its own, not even if you refer to its address
25292explicitly.  Such an address becomes an external reference, as if you
25293had only declared the function, and had not defined it.
25294
25295 This combination of 'inline' and 'extern' has almost the effect of a
25296macro.  The way to use it is to put a function definition in a header
25297file with these keywords, and put another copy of the definition
25298(lacking 'inline' and 'extern') in a library file.  The definition in
25299the header file causes most calls to the function to be inlined.  If any
25300uses of the function remain, they refer to the single copy in the
25301library.
25302
25303
25304File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
25305
253066.40 When is a Volatile Object Accessed?
25307========================================
25308
25309C has the concept of volatile objects.  These are normally accessed by
25310pointers and used for accessing hardware or inter-thread communication.
25311The standard encourages compilers to refrain from optimizations
25312concerning accesses to volatile objects, but leaves it implementation
25313defined as to what constitutes a volatile access.  The minimum
25314requirement is that at a sequence point all previous accesses to
25315volatile objects have stabilized and no subsequent accesses have
25316occurred.  Thus an implementation is free to reorder and combine
25317volatile accesses that occur between sequence points, but cannot do so
25318for accesses across a sequence point.  The use of volatile does not
25319allow you to violate the restriction on updating objects multiple times
25320between two sequence points.
25321
25322 Accesses to non-volatile objects are not ordered with respect to
25323volatile accesses.  You cannot use a volatile object as a memory barrier
25324to order a sequence of writes to non-volatile memory.  For instance:
25325
25326     int *ptr = SOMETHING;
25327     volatile int vobj;
25328     *ptr = SOMETHING;
25329     vobj = 1;
25330
25331Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
25332to *PTR occurs by the time the update of VOBJ happens.  If you need this
25333guarantee, you must use a stronger memory barrier such as:
25334
25335     int *ptr = SOMETHING;
25336     volatile int vobj;
25337     *ptr = SOMETHING;
25338     asm volatile ("" : : : "memory");
25339     vobj = 1;
25340
25341 A scalar volatile object is read when it is accessed in a void context:
25342
25343     volatile int *src = SOMEVALUE;
25344     *src;
25345
25346 Such expressions are rvalues, and GCC implements this as a read of the
25347volatile object being pointed to.
25348
25349 Assignments are also expressions and have an rvalue.  However when
25350assigning to a scalar volatile, the volatile object is not reread,
25351regardless of whether the assignment expression's rvalue is used or not.
25352If the assignment's rvalue is used, the value is that assigned to the
25353volatile object.  For instance, there is no read of VOBJ in all the
25354following cases:
25355
25356     int obj;
25357     volatile int vobj;
25358     vobj = SOMETHING;
25359     obj = vobj = SOMETHING;
25360     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
25361     obj = (SOMETHING, vobj = ANOTHERTHING);
25362
25363 If you need to read the volatile object after an assignment has
25364occurred, you must use a separate expression with an intervening
25365sequence point.
25366
25367 As bit-fields are not individually addressable, volatile bit-fields may
25368be implicitly read when written to, or when adjacent bit-fields are
25369accessed.  Bit-field operations may be optimized such that adjacent
25370bit-fields are only partially accessed, if they straddle a storage unit
25371boundary.  For these reasons it is unwise to use volatile bit-fields to
25372access hardware.
25373
25374
25375File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
25376
253776.41 Assembler Instructions with C Expression Operands
25378======================================================
25379
25380In an assembler instruction using 'asm', you can specify the operands of
25381the instruction using C expressions.  This means you need not guess
25382which registers or memory locations contain the data you want to use.
25383
25384 You must specify an assembler instruction template much like what
25385appears in a machine description, plus an operand constraint string for
25386each operand.
25387
25388 For example, here is how to use the 68881's 'fsinx' instruction:
25389
25390     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
25391
25392Here 'angle' is the C expression for the input operand while 'result' is
25393that of the output operand.  Each has '"f"' as its operand constraint,
25394saying that a floating-point register is required.  The '=' in '=f'
25395indicates that the operand is an output; all output operands'
25396constraints must use '='.  The constraints use the same language used in
25397the machine description (*note Constraints::).
25398
25399 Each operand is described by an operand-constraint string followed by
25400the C expression in parentheses.  A colon separates the assembler
25401template from the first output operand and another separates the last
25402output operand from the first input, if any.  Commas separate the
25403operands within each group.  The total number of operands is currently
25404limited to 30; this limitation may be lifted in some future version of
25405GCC.
25406
25407 If there are no output operands but there are input operands, you must
25408place two consecutive colons surrounding the place where the output
25409operands would go.
25410
25411 As of GCC version 3.1, it is also possible to specify input and output
25412operands using symbolic names which can be referenced within the
25413assembler code.  These names are specified inside square brackets
25414preceding the constraint string, and can be referenced inside the
25415assembler code using '%[NAME]' instead of a percentage sign followed by
25416the operand number.  Using named operands the above example could look
25417like:
25418
25419     asm ("fsinx %[angle],%[output]"
25420          : [output] "=f" (result)
25421          : [angle] "f" (angle));
25422
25423Note that the symbolic operand names have no relation whatsoever to
25424other C identifiers.  You may use any name you like, even those of
25425existing C symbols, but you must ensure that no two operands within the
25426same assembler construct use the same symbolic name.
25427
25428 Output operand expressions must be lvalues; the compiler can check
25429this.  The input operands need not be lvalues.  The compiler cannot
25430check whether the operands have data types that are reasonable for the
25431instruction being executed.  It does not parse the assembler instruction
25432template and does not know what it means or even whether it is valid
25433assembler input.  The extended 'asm' feature is most often used for
25434machine instructions the compiler itself does not know exist.  If the
25435output expression cannot be directly addressed (for example, it is a
25436bit-field), your constraint must allow a register.  In that case, GCC
25437uses the register as the output of the 'asm', and then stores that
25438register into the output.
25439
25440 The ordinary output operands must be write-only; GCC assumes that the
25441values in these operands before the instruction are dead and need not be
25442generated.  Extended asm supports input-output or read-write operands.
25443Use the constraint character '+' to indicate such an operand and list it
25444with the output operands.
25445
25446 You may, as an alternative, logically split its function into two
25447separate operands, one input operand and one write-only output operand.
25448The connection between them is expressed by constraints that say they
25449need to be in the same location when the instruction executes.  You can
25450use the same C expression for both operands, or different expressions.
25451For example, here we write the (fictitious) 'combine' instruction with
25452'bar' as its read-only source operand and 'foo' as its read-write
25453destination:
25454
25455     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
25456
25457The constraint '"0"' for operand 1 says that it must occupy the same
25458location as operand 0.  A number in constraint is allowed only in an
25459input operand and it must refer to an output operand.
25460
25461 Only a number in the constraint can guarantee that one operand is in
25462the same place as another.  The mere fact that 'foo' is the value of
25463both operands is not enough to guarantee that they are in the same place
25464in the generated assembler code.  The following does not work reliably:
25465
25466     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
25467
25468 Various optimizations or reloading could cause operands 0 and 1 to be
25469in different registers; GCC knows no reason not to do so.  For example,
25470the compiler might find a copy of the value of 'foo' in one register and
25471use it for operand 1, but generate the output operand 0 in a different
25472register (copying it afterward to 'foo''s own address).  Of course,
25473since the register for operand 1 is not even mentioned in the assembler
25474code, the result will not work, but GCC can't tell that.
25475
25476 As of GCC version 3.1, one may write '[NAME]' instead of the operand
25477number for a matching constraint.  For example:
25478
25479     asm ("cmoveq %1,%2,%[result]"
25480          : [result] "=r"(result)
25481          : "r" (test), "r"(new), "[result]"(old));
25482
25483 Sometimes you need to make an 'asm' operand be a specific register, but
25484there's no matching constraint letter for that register _by itself_.  To
25485force the operand into that register, use a local variable for the
25486operand and specify the register in the variable declaration.  *Note
25487Explicit Reg Vars::.  Then for the 'asm' operand, use any register
25488constraint letter that matches the register:
25489
25490     register int *p1 asm ("r0") = ...;
25491     register int *p2 asm ("r1") = ...;
25492     register int *result asm ("r0");
25493     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25494
25495 In the above example, beware that a register that is call-clobbered by
25496the target ABI will be overwritten by any function call in the
25497assignment, including library calls for arithmetic operators.  Also a
25498register may be clobbered when generating some operations, like variable
25499shift, memory copy or memory move on x86.  Assuming it is a
25500call-clobbered register, this may happen to 'r0' above by the assignment
25501to 'p2'.  If you have to use such a register, use temporary variables
25502for expressions between the register assignment and use:
25503
25504     int t1 = ...;
25505     register int *p1 asm ("r0") = ...;
25506     register int *p2 asm ("r1") = t1;
25507     register int *result asm ("r0");
25508     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25509
25510 Some instructions clobber specific hard registers.  To describe this,
25511write a third colon after the input operands, followed by the names of
25512the clobbered hard registers (given as strings).  Here is a realistic
25513example for the VAX:
25514
25515     asm volatile ("movc3 %0,%1,%2"
25516                   : /* no outputs */
25517                   : "g" (from), "g" (to), "g" (count)
25518                   : "r0", "r1", "r2", "r3", "r4", "r5");
25519
25520 You may not write a clobber description in a way that overlaps with an
25521input or output operand.  For example, you may not have an operand
25522describing a register class with one member if you mention that register
25523in the clobber list.  Variables declared to live in specific registers
25524(*note Explicit Reg Vars::), and used as asm input or output operands
25525must have no part mentioned in the clobber description.  There is no way
25526for you to specify that an input operand is modified without also
25527specifying it as an output operand.  Note that if all the output
25528operands you specify are for this purpose (and hence unused), you then
25529also need to specify 'volatile' for the 'asm' construct, as described
25530below, to prevent GCC from deleting the 'asm' statement as unused.
25531
25532 If you refer to a particular hardware register from the assembler code,
25533you probably have to list the register after the third colon to tell the
25534compiler the register's value is modified.  In some assemblers, the
25535register names begin with '%'; to produce one '%' in the assembler code,
25536you must write '%%' in the input.
25537
25538 If your assembler instruction can alter the condition code register,
25539add 'cc' to the list of clobbered registers.  GCC on some machines
25540represents the condition codes as a specific hardware register; 'cc'
25541serves to name this register.  On other machines, the condition code is
25542handled differently, and specifying 'cc' has no effect.  But it is valid
25543no matter what the machine.
25544
25545 If your assembler instructions access memory in an unpredictable
25546fashion, add 'memory' to the list of clobbered registers.  This causes
25547GCC to not keep memory values cached in registers across the assembler
25548instruction and not optimize stores or loads to that memory.  You also
25549should add the 'volatile' keyword if the memory affected is not listed
25550in the inputs or outputs of the 'asm', as the 'memory' clobber does not
25551count as a side-effect of the 'asm'.  If you know how large the accessed
25552memory is, you can add it as input or output but if this is not known,
25553you should add 'memory'.  As an example, if you access ten bytes of a
25554string, you can use a memory input like:
25555
25556     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
25557
25558 Note that in the following example the memory input is necessary,
25559otherwise GCC might optimize the store to 'x' away:
25560     int foo ()
25561     {
25562       int x = 42;
25563       int *y = &x;
25564       int result;
25565       asm ("magic stuff accessing an 'int' pointed to by '%1'"
25566            : "=&d" (r) : "a" (y), "m" (*y));
25567       return result;
25568     }
25569
25570 You can put multiple assembler instructions together in a single 'asm'
25571template, separated by the characters normally used in assembly code for
25572the system.  A combination that works in most places is a newline to
25573break the line, plus a tab character to move to the instruction field
25574(written as '\n\t').  Sometimes semicolons can be used, if the assembler
25575allows semicolons as a line-breaking character.  Note that some
25576assembler dialects use semicolons to start a comment.  The input
25577operands are guaranteed not to use any of the clobbered registers, and
25578neither do the output operands' addresses, so you can read and write the
25579clobbered registers as many times as you like.  Here is an example of
25580multiple instructions in a template; it assumes the subroutine '_foo'
25581accepts arguments in registers 9 and 10:
25582
25583     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
25584          : /* no outputs */
25585          : "g" (from), "g" (to)
25586          : "r9", "r10");
25587
25588 Unless an output operand has the '&' constraint modifier, GCC may
25589allocate it in the same register as an unrelated input operand, on the
25590assumption the inputs are consumed before the outputs are produced.
25591This assumption may be false if the assembler code actually consists of
25592more than one instruction.  In such a case, use '&' for each output
25593operand that may not overlap an input.  *Note Modifiers::.
25594
25595 If you want to test the condition code produced by an assembler
25596instruction, you must include a branch and a label in the 'asm'
25597construct, as follows:
25598
25599     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
25600          : "g" (result)
25601          : "g" (input));
25602
25603This assumes your assembler supports local labels, as the GNU assembler
25604and most Unix assemblers do.
25605
25606 Speaking of labels, jumps from one 'asm' to another are not supported.
25607The compiler's optimizers do not know about these jumps, and therefore
25608they cannot take account of them when deciding how to optimize.  *Note
25609Extended asm with goto::.
25610
25611 Usually the most convenient way to use these 'asm' instructions is to
25612encapsulate them in macros that look like functions.  For example,
25613
25614     #define sin(x)       \
25615     ({ double __value, __arg = (x);   \
25616        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
25617        __value; })
25618
25619Here the variable '__arg' is used to make sure that the instruction
25620operates on a proper 'double' value, and to accept only those arguments
25621'x' that can convert automatically to a 'double'.
25622
25623 Another way to make sure the instruction operates on the correct data
25624type is to use a cast in the 'asm'.  This is different from using a
25625variable '__arg' in that it converts more different types.  For example,
25626if the desired type is 'int', casting the argument to 'int' accepts a
25627pointer with no complaint, while assigning the argument to an 'int'
25628variable named '__arg' warns about using a pointer unless the caller
25629explicitly casts it.
25630
25631 If an 'asm' has output operands, GCC assumes for optimization purposes
25632the instruction has no side effects except to change the output
25633operands.  This does not mean instructions with a side effect cannot be
25634used, but you must be careful, because the compiler may eliminate them
25635if the output operands aren't used, or move them out of loops, or
25636replace two with one if they constitute a common subexpression.  Also,
25637if your instruction does have a side effect on a variable that otherwise
25638appears not to change, the old value of the variable may be reused later
25639if it happens to be found in a register.
25640
25641 You can prevent an 'asm' instruction from being deleted by writing the
25642keyword 'volatile' after the 'asm'.  For example:
25643
25644     #define get_and_set_priority(new)              \
25645     ({ int __old;                                  \
25646        asm volatile ("get_and_set_priority %0, %1" \
25647                      : "=g" (__old) : "g" (new));  \
25648        __old; })
25649
25650The 'volatile' keyword indicates that the instruction has important
25651side-effects.  GCC does not delete a volatile 'asm' if it is reachable.
25652(The instruction can still be deleted if GCC can prove that control flow
25653never reaches the location of the instruction.)  Note that even a
25654volatile 'asm' instruction can be moved relative to other code,
25655including across jump instructions.  For example, on many targets there
25656is a system register that can be set to control the rounding mode of
25657floating-point operations.  You might try setting it with a volatile
25658'asm', like this PowerPC example:
25659
25660            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
25661            sum = x + y;
25662
25663This does not work reliably, as the compiler may move the addition back
25664before the volatile 'asm'.  To make it work you need to add an
25665artificial dependency to the 'asm' referencing a variable in the code
25666you don't want moved, for example:
25667
25668         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
25669         sum = x + y;
25670
25671 Similarly, you can't expect a sequence of volatile 'asm' instructions
25672to remain perfectly consecutive.  If you want consecutive output, use a
25673single 'asm'.  Also, GCC performs some optimizations across a volatile
25674'asm' instruction; GCC does not "forget everything" when it encounters a
25675volatile 'asm' instruction the way some other compilers do.
25676
25677 An 'asm' instruction without any output operands is treated identically
25678to a volatile 'asm' instruction.
25679
25680 It is a natural idea to look for a way to give access to the condition
25681code left by the assembler instruction.  However, when we attempted to
25682implement this, we found no way to make it work reliably.  The problem
25683is that output operands might need reloading, which result in additional
25684following "store" instructions.  On most machines, these instructions
25685alter the condition code before there is time to test it.  This problem
25686doesn't arise for ordinary "test" and "compare" instructions because
25687they don't have any output operands.
25688
25689 For reasons similar to those described above, it is not possible to
25690give an assembler instruction access to the condition code left by
25691previous instructions.
25692
25693 As of GCC version 4.5, 'asm goto' may be used to have the assembly jump
25694to one or more C labels.  In this form, a fifth section after the
25695clobber list contains a list of all C labels to which the assembly may
25696jump.  Each label operand is implicitly self-named.  The 'asm' is also
25697assumed to fall through to the next statement.
25698
25699 This form of 'asm' is restricted to not have outputs.  This is due to a
25700internal restriction in the compiler that control transfer instructions
25701cannot have outputs.  This restriction on 'asm goto' may be lifted in
25702some future version of the compiler.  In the meantime, 'asm goto' may
25703include a memory clobber, and so leave outputs in memory.
25704
25705     int frob(int x)
25706     {
25707       int y;
25708       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
25709                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
25710       return y;
25711      error:
25712       return -1;
25713     }
25714
25715In this (inefficient) example, the 'frob' instruction sets the carry bit
25716to indicate an error.  The 'jc' instruction detects this and branches to
25717the 'error' label.  Finally, the output of the 'frob' instruction
25718('%r5') is stored into the memory for variable 'y', which is later read
25719by the 'return' statement.
25720
25721     void doit(void)
25722     {
25723       int i = 0;
25724       asm goto ("mfsr %%r1, 123; jmp %%r1;"
25725                 ".pushsection doit_table;"
25726                 ".long %l0, %l1, %l2, %l3;"
25727                 ".popsection"
25728                 : : : "r1" : label1, label2, label3, label4);
25729       __builtin_unreachable ();
25730
25731      label1:
25732       f1();
25733       return;
25734      label2:
25735       f2();
25736       return;
25737      label3:
25738       i = 1;
25739      label4:
25740       f3(i);
25741     }
25742
25743In this (also inefficient) example, the 'mfsr' instruction reads an
25744address from some out-of-band machine register, and the following 'jmp'
25745instruction branches to that address.  The address read by the 'mfsr'
25746instruction is assumed to have been previously set via some
25747application-specific mechanism to be one of the four values stored in
25748the 'doit_table' section.  Finally, the 'asm' is followed by a call to
25749'__builtin_unreachable' to indicate that the 'asm' does not in fact fall
25750through.
25751
25752     #define TRACE1(NUM)                         \
25753       do {                                      \
25754         asm goto ("0: nop;"                     \
25755                   ".pushsection trace_table;"   \
25756                   ".long 0b, %l0;"              \
25757                   ".popsection"                 \
25758                   : : : : trace#NUM);           \
25759         if (0) { trace#NUM: trace(); }          \
25760       } while (0)
25761     #define TRACE  TRACE1(__COUNTER__)
25762
25763In this example (which in fact inspired the 'asm goto' feature) we want
25764on rare occasions to call the 'trace' function; on other occasions we'd
25765like to keep the overhead to the absolute minimum.  The normal code path
25766consists of a single 'nop' instruction.  However, we record the address
25767of this 'nop' together with the address of a label that calls the
25768'trace' function.  This allows the 'nop' instruction to be patched at
25769run time to be an unconditional branch to the stored label.  It is
25770assumed that an optimizing compiler moves the labeled block out of line,
25771to optimize the fall through path from the 'asm'.
25772
25773 If you are writing a header file that should be includable in ISO C
25774programs, write '__asm__' instead of 'asm'.  *Note Alternate Keywords::.
25775
257766.41.1 Size of an 'asm'
25777-----------------------
25778
25779Some targets require that GCC track the size of each instruction used in
25780order to generate correct code.  Because the final length of an 'asm' is
25781only known by the assembler, GCC must make an estimate as to how big it
25782will be.  The estimate is formed by counting the number of statements in
25783the pattern of the 'asm' and multiplying that by the length of the
25784longest instruction on that processor.  Statements in the 'asm' are
25785identified by newline characters and whatever statement separator
25786characters are supported by the assembler; on most processors this is
25787the ';' character.
25788
25789 Normally, GCC's estimate is perfectly adequate to ensure that correct
25790code is generated, but it is possible to confuse the compiler if you use
25791pseudo instructions or assembler macros that expand into multiple real
25792instructions or if you use assembler directives that expand to more
25793space in the object file than is needed for a single instruction.  If
25794this happens then the assembler produces a diagnostic saying that a
25795label is unreachable.
25796
257976.41.2 i386 floating-point asm operands
25798---------------------------------------
25799
25800On i386 targets, there are several rules on the usage of stack-like
25801registers in the operands of an 'asm'.  These rules apply only to the
25802operands that are stack-like registers:
25803
25804  1. Given a set of input registers that die in an 'asm', it is
25805     necessary to know which are implicitly popped by the 'asm', and
25806     which must be explicitly popped by GCC.
25807
25808     An input register that is implicitly popped by the 'asm' must be
25809     explicitly clobbered, unless it is constrained to match an output
25810     operand.
25811
25812  2. For any input register that is implicitly popped by an 'asm', it is
25813     necessary to know how to adjust the stack to compensate for the
25814     pop.  If any non-popped input is closer to the top of the reg-stack
25815     than the implicitly popped register, it would not be possible to
25816     know what the stack looked like--it's not clear how the rest of the
25817     stack "slides up".
25818
25819     All implicitly popped input registers must be closer to the top of
25820     the reg-stack than any input that is not implicitly popped.
25821
25822     It is possible that if an input dies in an 'asm', the compiler
25823     might use the input register for an output reload.  Consider this
25824     example:
25825
25826          asm ("foo" : "=t" (a) : "f" (b));
25827
25828     This code says that input 'b' is not popped by the 'asm', and that
25829     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
25830     one deeper after the 'asm' than it was before.  But, it is possible
25831     that reload may think that it can use the same register for both
25832     the input and the output.
25833
25834     To prevent this from happening, if any input operand uses the 'f'
25835     constraint, all output register constraints must use the '&'
25836     early-clobber modifier.
25837
25838     The example above would be correctly written as:
25839
25840          asm ("foo" : "=&t" (a) : "f" (b));
25841
25842  3. Some operands need to be in particular places on the stack.  All
25843     output operands fall in this category--GCC has no other way to know
25844     which registers the outputs appear in unless you indicate this in
25845     the constraints.
25846
25847     Output operands must specifically indicate which register an output
25848     appears in after an 'asm'.  '=f' is not allowed: the operand
25849     constraints must select a class with a single register.
25850
25851  4. Output operands may not be "inserted" between existing stack
25852     registers.  Since no 387 opcode uses a read/write operand, all
25853     output operands are dead before the 'asm', and are pushed by the
25854     'asm'.  It makes no sense to push anywhere but the top of the
25855     reg-stack.
25856
25857     Output operands must start at the top of the reg-stack: output
25858     operands may not "skip" a register.
25859
25860  5. Some 'asm' statements may need extra stack space for internal
25861     calculations.  This can be guaranteed by clobbering stack registers
25862     unrelated to the inputs and outputs.
25863
25864 Here are a couple of reasonable 'asm's to want to write.  This 'asm'
25865takes one input, which is internally popped, and produces two outputs.
25866
25867     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
25868
25869This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
25870and replaces them with one output.  The 'st(1)' clobber is necessary for
25871the compiler to know that 'fyl2xp1' pops both inputs.
25872
25873     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
25874
25875
25876File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
25877
258786.42 Constraints for 'asm' Operands
25879===================================
25880
25881Here are specific details on what constraint letters you can use with
25882'asm' operands.  Constraints can say whether an operand may be in a
25883register, and which kinds of register; whether the operand can be a
25884memory reference, and which kinds of address; whether the operand may be
25885an immediate constant, and which possible values it may have.
25886Constraints can also require two operands to match.  Side-effects aren't
25887allowed in operands of inline 'asm', unless '<' or '>' constraints are
25888used, because there is no guarantee that the side-effects will happen
25889exactly once in an instruction that can update the addressing register.
25890
25891* Menu:
25892
25893* Simple Constraints::  Basic use of constraints.
25894* Multi-Alternative::   When an insn has two alternative constraint-patterns.
25895* Modifiers::           More precise control over effects of constraints.
25896* Machine Constraints:: Special constraints for some particular machines.
25897
25898
25899File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
25900
259016.42.1 Simple Constraints
25902-------------------------
25903
25904The simplest kind of constraint is a string full of letters, each of
25905which describes one kind of operand that is permitted.  Here are the
25906letters that are allowed:
25907
25908whitespace
25909     Whitespace characters are ignored and can be inserted at any
25910     position except the first.  This enables each alternative for
25911     different operands to be visually aligned in the machine
25912     description even if they have different number of constraints and
25913     modifiers.
25914
25915'm'
25916     A memory operand is allowed, with any kind of address that the
25917     machine supports in general.  Note that the letter used for the
25918     general memory constraint can be re-defined by a back end using the
25919     'TARGET_MEM_CONSTRAINT' macro.
25920
25921'o'
25922     A memory operand is allowed, but only if the address is
25923     "offsettable".  This means that adding a small integer (actually,
25924     the width in bytes of the operand, as determined by its machine
25925     mode) may be added to the address and the result is also a valid
25926     memory address.
25927
25928     For example, an address which is constant is offsettable; so is an
25929     address that is the sum of a register and a constant (as long as a
25930     slightly larger constant is also within the range of
25931     address-offsets supported by the machine); but an autoincrement or
25932     autodecrement address is not offsettable.  More complicated
25933     indirect/indexed addresses may or may not be offsettable depending
25934     on the other addressing modes that the machine supports.
25935
25936     Note that in an output operand which can be matched by another
25937     operand, the constraint letter 'o' is valid only when accompanied
25938     by both '<' (if the target machine has predecrement addressing) and
25939     '>' (if the target machine has preincrement addressing).
25940
25941'V'
25942     A memory operand that is not offsettable.  In other words, anything
25943     that would fit the 'm' constraint but not the 'o' constraint.
25944
25945'<'
25946     A memory operand with autodecrement addressing (either predecrement
25947     or postdecrement) is allowed.  In inline 'asm' this constraint is
25948     only allowed if the operand is used exactly once in an instruction
25949     that can handle the side-effects.  Not using an operand with '<' in
25950     constraint string in the inline 'asm' pattern at all or using it in
25951     multiple instructions isn't valid, because the side-effects
25952     wouldn't be performed or would be performed more than once.
25953     Furthermore, on some targets the operand with '<' in constraint
25954     string must be accompanied by special instruction suffixes like
25955     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
25956
25957'>'
25958     A memory operand with autoincrement addressing (either preincrement
25959     or postincrement) is allowed.  In inline 'asm' the same
25960     restrictions as for '<' apply.
25961
25962'r'
25963     A register operand is allowed provided that it is in a general
25964     register.
25965
25966'i'
25967     An immediate integer operand (one with constant value) is allowed.
25968     This includes symbolic constants whose values will be known only at
25969     assembly time or later.
25970
25971'n'
25972     An immediate integer operand with a known numeric value is allowed.
25973     Many systems cannot support assembly-time constants for operands
25974     less than a word wide.  Constraints for these operands should use
25975     'n' rather than 'i'.
25976
25977'I', 'J', 'K', ... 'P'
25978     Other letters in the range 'I' through 'P' may be defined in a
25979     machine-dependent fashion to permit immediate integer operands with
25980     explicit integer values in specified ranges.  For example, on the
25981     68000, 'I' is defined to stand for the range of values 1 to 8.
25982     This is the range permitted as a shift count in the shift
25983     instructions.
25984
25985'E'
25986     An immediate floating operand (expression code 'const_double') is
25987     allowed, but only if the target floating point format is the same
25988     as that of the host machine (on which the compiler is running).
25989
25990'F'
25991     An immediate floating operand (expression code 'const_double' or
25992     'const_vector') is allowed.
25993
25994'G', 'H'
25995     'G' and 'H' may be defined in a machine-dependent fashion to permit
25996     immediate floating operands in particular ranges of values.
25997
25998's'
25999     An immediate integer operand whose value is not an explicit integer
26000     is allowed.
26001
26002     This might appear strange; if an insn allows a constant operand
26003     with a value not known at compile time, it certainly must allow any
26004     known value.  So why use 's' instead of 'i'?  Sometimes it allows
26005     better code to be generated.
26006
26007     For example, on the 68000 in a fullword instruction it is possible
26008     to use an immediate operand; but if the immediate value is between
26009     -128 and 127, better code results from loading the value into a
26010     register and using the register.  This is because the load into the
26011     register can be done with a 'moveq' instruction.  We arrange for
26012     this to happen by defining the letter 'K' to mean "any integer
26013     outside the range -128 to 127", and then specifying 'Ks' in the
26014     operand constraints.
26015
26016'g'
26017     Any register, memory or immediate integer operand is allowed,
26018     except for registers that are not general registers.
26019
26020'X'
26021     Any operand whatsoever is allowed.
26022
26023'0', '1', '2', ... '9'
26024     An operand that matches the specified operand number is allowed.
26025     If a digit is used together with letters within the same
26026     alternative, the digit should come last.
26027
26028     This number is allowed to be more than a single digit.  If multiple
26029     digits are encountered consecutively, they are interpreted as a
26030     single decimal integer.  There is scant chance for ambiguity, since
26031     to-date it has never been desirable that '10' be interpreted as
26032     matching either operand 1 _or_ operand 0.  Should this be desired,
26033     one can use multiple alternatives instead.
26034
26035     This is called a "matching constraint" and what it really means is
26036     that the assembler has only a single operand that fills two roles
26037     which 'asm' distinguishes.  For example, an add instruction uses
26038     two input operands and an output operand, but on most CISC machines
26039     an add instruction really has only two operands, one of them an
26040     input-output operand:
26041
26042          addl #35,r12
26043
26044     Matching constraints are used in these circumstances.  More
26045     precisely, the two operands that match must include one input-only
26046     operand and one output-only operand.  Moreover, the digit must be a
26047     smaller number than the number of the operand that uses it in the
26048     constraint.
26049
26050'p'
26051     An operand that is a valid memory address is allowed.  This is for
26052     "load address" and "push address" instructions.
26053
26054     'p' in the constraint must be accompanied by 'address_operand' as
26055     the predicate in the 'match_operand'.  This predicate interprets
26056     the mode specified in the 'match_operand' as the mode of the memory
26057     reference for which the address would be valid.
26058
26059OTHER-LETTERS
26060     Other letters can be defined in machine-dependent fashion to stand
26061     for particular classes of registers or other arbitrary operand
26062     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
26063     for data, address and floating point registers.
26064
26065
26066File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
26067
260686.42.2 Multiple Alternative Constraints
26069---------------------------------------
26070
26071Sometimes a single instruction has multiple alternative sets of possible
26072operands.  For example, on the 68000, a logical-or instruction can
26073combine register or an immediate value into memory, or it can combine
26074any kind of operand into a register; but it cannot combine one memory
26075location into another.
26076
26077 These constraints are represented as multiple alternatives.  An
26078alternative can be described by a series of letters for each operand.
26079The overall constraint for an operand is made from the letters for this
26080operand from the first alternative, a comma, the letters for this
26081operand from the second alternative, a comma, and so on until the last
26082alternative.
26083
26084 If all the operands fit any one alternative, the instruction is valid.
26085Otherwise, for each alternative, the compiler counts how many
26086instructions must be added to copy the operands so that that alternative
26087applies.  The alternative requiring the least copying is chosen.  If two
26088alternatives need the same amount of copying, the one that comes first
26089is chosen.  These choices can be altered with the '?' and '!'
26090characters:
26091
26092'?'
26093     Disparage slightly the alternative that the '?' appears in, as a
26094     choice when no alternative applies exactly.  The compiler regards
26095     this alternative as one unit more costly for each '?' that appears
26096     in it.
26097
26098'!'
26099     Disparage severely the alternative that the '!' appears in.  This
26100     alternative can still be used if it fits without reloading, but if
26101     reloading is needed, some other alternative will be used.
26102
26103
26104File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
26105
261066.42.3 Constraint Modifier Characters
26107-------------------------------------
26108
26109Here are constraint modifier characters.
26110
26111'='
26112     Means that this operand is write-only for this instruction: the
26113     previous value is discarded and replaced by output data.
26114
26115'+'
26116     Means that this operand is both read and written by the
26117     instruction.
26118
26119     When the compiler fixes up the operands to satisfy the constraints,
26120     it needs to know which operands are inputs to the instruction and
26121     which are outputs from it.  '=' identifies an output; '+'
26122     identifies an operand that is both input and output; all other
26123     operands are assumed to be input only.
26124
26125     If you specify '=' or '+' in a constraint, you put it in the first
26126     character of the constraint string.
26127
26128'&'
26129     Means (in a particular alternative) that this operand is an
26130     "earlyclobber" operand, which is modified before the instruction is
26131     finished using the input operands.  Therefore, this operand may not
26132     lie in a register that is used as an input operand or as part of
26133     any memory address.
26134
26135     '&' applies only to the alternative in which it is written.  In
26136     constraints with multiple alternatives, sometimes one alternative
26137     requires '&' while others do not.  See, for example, the 'movdf'
26138     insn of the 68000.
26139
26140     An input operand can be tied to an earlyclobber operand if its only
26141     use as an input occurs before the early result is written.  Adding
26142     alternatives of this form often allows GCC to produce better code
26143     when only some of the inputs can be affected by the earlyclobber.
26144     See, for example, the 'mulsi3' insn of the ARM.
26145
26146     '&' does not obviate the need to write '='.
26147
26148'%'
26149     Declares the instruction to be commutative for this operand and the
26150     following operand.  This means that the compiler may interchange
26151     the two operands if that is the cheapest way to make all operands
26152     fit the constraints.  GCC can only handle one commutative pair in
26153     an asm; if you use more, the compiler may fail.  Note that you need
26154     not use the modifier if the two alternatives are strictly
26155     identical; this would only waste time in the reload pass.  The
26156     modifier is not operational after register allocation, so the
26157     result of 'define_peephole2' and 'define_split's performed after
26158     reload cannot rely on '%' to make the intended insn match.
26159
26160'#'
26161     Says that all following characters, up to the next comma, are to be
26162     ignored as a constraint.  They are significant only for choosing
26163     register preferences.
26164
26165'*'
26166     Says that the following character should be ignored when choosing
26167     register preferences.  '*' has no effect on the meaning of the
26168     constraint as a constraint, and no effect on reloading.  For LRA
26169     '*' additionally disparages slightly the alternative if the
26170     following character matches the operand.
26171
26172
26173File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
26174
261756.42.4 Constraints for Particular Machines
26176------------------------------------------
26177
26178Whenever possible, you should use the general-purpose constraint letters
26179in 'asm' arguments, since they will convey meaning more readily to
26180people reading your code.  Failing that, use the constraint letters that
26181usually have very similar meanings across architectures.  The most
26182commonly used constraints are 'm' and 'r' (for memory and
26183general-purpose registers respectively; *note Simple Constraints::), and
26184'I', usually the letter indicating the most common immediate-constant
26185format.
26186
26187 Each architecture defines additional constraints.  These constraints
26188are used by the compiler itself for instruction generation, as well as
26189for 'asm' statements; therefore, some of the constraints are not
26190particularly useful for 'asm'.  Here is a summary of some of the
26191machine-dependent constraints available on some particular machines; it
26192includes both constraints that are useful for 'asm' and constraints that
26193aren't.  The compiler source file mentioned in the table heading for
26194each architecture is the definitive reference for the meanings of that
26195architecture's constraints.
26196
26197_AArch64 family--'config/aarch64/constraints.md'_
26198     'k'
26199          The stack pointer register ('SP')
26200
26201     'w'
26202          Floating point or SIMD vector register
26203
26204     'I'
26205          Integer constant that is valid as an immediate operand in an
26206          'ADD' instruction
26207
26208     'J'
26209          Integer constant that is valid as an immediate operand in a
26210          'SUB' instruction (once negated)
26211
26212     'K'
26213          Integer constant that can be used with a 32-bit logical
26214          instruction
26215
26216     'L'
26217          Integer constant that can be used with a 64-bit logical
26218          instruction
26219
26220     'M'
26221          Integer constant that is valid as an immediate operand in a
26222          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
26223          to one of several different machine instructions depending on
26224          the value
26225
26226     'N'
26227          Integer constant that is valid as an immediate operand in a
26228          64-bit 'MOV' pseudo instruction
26229
26230     'S'
26231          An absolute symbolic address or a label reference
26232
26233     'Y'
26234          Floating point constant zero
26235
26236     'Z'
26237          Integer constant zero
26238
26239     'Usa'
26240          An absolute symbolic address
26241
26242     'Ush'
26243          The high part (bits 12 and upwards) of the pc-relative address
26244          of a symbol within 4GB of the instruction
26245
26246     'Q'
26247          A memory address which uses a single base register with no
26248          offset
26249
26250     'Ump'
26251          A memory address suitable for a load/store pair instruction in
26252          SI, DI, SF and DF modes
26253
26254_ARM family--'config/arm/constraints.md'_
26255     'w'
26256          VFP floating-point register
26257
26258     'G'
26259          The floating-point constant 0.0
26260
26261     'I'
26262          Integer that is valid as an immediate operand in a data
26263          processing instruction.  That is, an integer in the range 0 to
26264          255 rotated by a multiple of 2
26265
26266     'J'
26267          Integer in the range -4095 to 4095
26268
26269     'K'
26270          Integer that satisfies constraint 'I' when inverted (ones
26271          complement)
26272
26273     'L'
26274          Integer that satisfies constraint 'I' when negated (twos
26275          complement)
26276
26277     'M'
26278          Integer in the range 0 to 32
26279
26280     'Q'
26281          A memory reference where the exact address is in a single
26282          register (''m'' is preferable for 'asm' statements)
26283
26284     'R'
26285          An item in the constant pool
26286
26287     'S'
26288          A symbol in the text segment of the current file
26289
26290     'Uv'
26291          A memory reference suitable for VFP load/store insns
26292          (reg+constant offset)
26293
26294     'Uy'
26295          A memory reference suitable for iWMMXt load/store
26296          instructions.
26297
26298     'Uq'
26299          A memory reference suitable for the ARMv4 ldrsb instruction.
26300
26301_AVR family--'config/avr/constraints.md'_
26302     'l'
26303          Registers from r0 to r15
26304
26305     'a'
26306          Registers from r16 to r23
26307
26308     'd'
26309          Registers from r16 to r31
26310
26311     'w'
26312          Registers from r24 to r31.  These registers can be used in
26313          'adiw' command
26314
26315     'e'
26316          Pointer register (r26-r31)
26317
26318     'b'
26319          Base pointer register (r28-r31)
26320
26321     'q'
26322          Stack pointer register (SPH:SPL)
26323
26324     't'
26325          Temporary register r0
26326
26327     'x'
26328          Register pair X (r27:r26)
26329
26330     'y'
26331          Register pair Y (r29:r28)
26332
26333     'z'
26334          Register pair Z (r31:r30)
26335
26336     'I'
26337          Constant greater than -1, less than 64
26338
26339     'J'
26340          Constant greater than -64, less than 1
26341
26342     'K'
26343          Constant integer 2
26344
26345     'L'
26346          Constant integer 0
26347
26348     'M'
26349          Constant that fits in 8 bits
26350
26351     'N'
26352          Constant integer -1
26353
26354     'O'
26355          Constant integer 8, 16, or 24
26356
26357     'P'
26358          Constant integer 1
26359
26360     'G'
26361          A floating point constant 0.0
26362
26363     'Q'
26364          A memory address based on Y or Z pointer with displacement.
26365
26366_Epiphany--'config/epiphany/constraints.md'_
26367     'U16'
26368          An unsigned 16-bit constant.
26369
26370     'K'
26371          An unsigned 5-bit constant.
26372
26373     'L'
26374          A signed 11-bit constant.
26375
26376     'Cm1'
26377          A signed 11-bit constant added to -1.  Can only match when the
26378          '-m1reg-REG' option is active.
26379
26380     'Cl1'
26381          Left-shift of -1, i.e., a bit mask with a block of leading
26382          ones, the rest being a block of trailing zeroes.  Can only
26383          match when the '-m1reg-REG' option is active.
26384
26385     'Cr1'
26386          Right-shift of -1, i.e., a bit mask with a trailing block of
26387          ones, the rest being zeroes.  Or to put it another way, one
26388          less than a power of two.  Can only match when the
26389          '-m1reg-REG' option is active.
26390
26391     'Cal'
26392          Constant for arithmetic/logical operations.  This is like 'i',
26393          except that for position independent code, no symbols /
26394          expressions needing relocations are allowed.
26395
26396     'Csy'
26397          Symbolic constant for call/jump instruction.
26398
26399     'Rcs'
26400          The register class usable in short insns.  This is a register
26401          class constraint, and can thus drive register allocation.
26402          This constraint won't match unless '-mprefer-short-insn-regs'
26403          is in effect.
26404
26405     'Rsc'
26406          The the register class of registers that can be used to hold a
26407          sibcall call address.  I.e., a caller-saved register.
26408
26409     'Rct'
26410          Core control register class.
26411
26412     'Rgs'
26413          The register group usable in short insns.  This constraint
26414          does not use a register class, so that it only passively
26415          matches suitable registers, and doesn't drive register
26416          allocation.
26417
26418     'Rra'
26419          Matches the return address if it can be replaced with the link
26420          register.
26421
26422     'Rcc'
26423          Matches the integer condition code register.
26424
26425     'Sra'
26426          Matches the return address if it is in a stack slot.
26427
26428     'Cfm'
26429          Matches control register values to switch fp mode, which are
26430          encapsulated in 'UNSPEC_FP_MODE'.
26431
26432_CR16 Architecture--'config/cr16/cr16.h'_
26433
26434     'b'
26435          Registers from r0 to r14 (registers without stack pointer)
26436
26437     't'
26438          Register from r0 to r11 (all 16-bit registers)
26439
26440     'p'
26441          Register from r12 to r15 (all 32-bit registers)
26442
26443     'I'
26444          Signed constant that fits in 4 bits
26445
26446     'J'
26447          Signed constant that fits in 5 bits
26448
26449     'K'
26450          Signed constant that fits in 6 bits
26451
26452     'L'
26453          Unsigned constant that fits in 4 bits
26454
26455     'M'
26456          Signed constant that fits in 32 bits
26457
26458     'N'
26459          Check for 64 bits wide constants for add/sub instructions
26460
26461     'G'
26462          Floating point constant that is legal for store immediate
26463
26464_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
26465     'a'
26466          General register 1
26467
26468     'f'
26469          Floating point register
26470
26471     'q'
26472          Shift amount register
26473
26474     'x'
26475          Floating point register (deprecated)
26476
26477     'y'
26478          Upper floating point register (32-bit), floating point
26479          register (64-bit)
26480
26481     'Z'
26482          Any register
26483
26484     'I'
26485          Signed 11-bit integer constant
26486
26487     'J'
26488          Signed 14-bit integer constant
26489
26490     'K'
26491          Integer constant that can be deposited with a 'zdepi'
26492          instruction
26493
26494     'L'
26495          Signed 5-bit integer constant
26496
26497     'M'
26498          Integer constant 0
26499
26500     'N'
26501          Integer constant that can be loaded with a 'ldil' instruction
26502
26503     'O'
26504          Integer constant whose value plus one is a power of 2
26505
26506     'P'
26507          Integer constant that can be used for 'and' operations in
26508          'depi' and 'extru' instructions
26509
26510     'S'
26511          Integer constant 31
26512
26513     'U'
26514          Integer constant 63
26515
26516     'G'
26517          Floating-point constant 0.0
26518
26519     'A'
26520          A 'lo_sum' data-linkage-table memory operand
26521
26522     'Q'
26523          A memory operand that can be used as the destination operand
26524          of an integer store instruction
26525
26526     'R'
26527          A scaled or unscaled indexed memory operand
26528
26529     'T'
26530          A memory operand for floating-point loads and stores
26531
26532     'W'
26533          A register indirect memory operand
26534
26535_picoChip family--'picochip.h'_
26536     'k'
26537          Stack register.
26538
26539     'f'
26540          Pointer register.  A register which can be used to access
26541          memory without supplying an offset.  Any other register can be
26542          used to access memory, but will need a constant offset.  In
26543          the case of the offset being zero, it is more efficient to use
26544          a pointer register, since this reduces code size.
26545
26546     't'
26547          A twin register.  A register which may be paired with an
26548          adjacent register to create a 32-bit register.
26549
26550     'a'
26551          Any absolute memory address (e.g., symbolic constant, symbolic
26552          constant + offset).
26553
26554     'I'
26555          4-bit signed integer.
26556
26557     'J'
26558          4-bit unsigned integer.
26559
26560     'K'
26561          8-bit signed integer.
26562
26563     'M'
26564          Any constant whose absolute value is no greater than 4-bits.
26565
26566     'N'
26567          10-bit signed integer
26568
26569     'O'
26570          16-bit signed integer.
26571
26572_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
26573     'b'
26574          Address base register
26575
26576     'd'
26577          Floating point register (containing 64-bit value)
26578
26579     'f'
26580          Floating point register (containing 32-bit value)
26581
26582     'v'
26583          Altivec vector register
26584
26585     'wa'
26586          Any VSX register if the -mvsx option was used or NO_REGS.
26587
26588     'wd'
26589          VSX vector register to hold vector double data or NO_REGS.
26590
26591     'wf'
26592          VSX vector register to hold vector float data or NO_REGS.
26593
26594     'wg'
26595          If '-mmfpgpr' was used, a floating point register or NO_REGS.
26596
26597     'wl'
26598          Floating point register if the LFIWAX instruction is enabled
26599          or NO_REGS.
26600
26601     'wm'
26602          VSX register if direct move instructions are enabled, or
26603          NO_REGS.
26604
26605     'wn'
26606          No register (NO_REGS).
26607
26608     'wr'
26609          General purpose register if 64-bit instructions are enabled or
26610          NO_REGS.
26611
26612     'ws'
26613          VSX vector register to hold scalar double values or NO_REGS.
26614
26615     'wt'
26616          VSX vector register to hold 128 bit integer or NO_REGS.
26617
26618     'wu'
26619          Altivec register to use for float/32-bit int loads/stores or
26620          NO_REGS.
26621
26622     'wv'
26623          Altivec register to use for double loads/stores or NO_REGS.
26624
26625     'ww'
26626          FP or VSX register to perform float operations under '-mvsx'
26627          or NO_REGS.
26628
26629     'wx'
26630          Floating point register if the STFIWX instruction is enabled
26631          or NO_REGS.
26632
26633     'wy'
26634          VSX vector register to hold scalar float values or NO_REGS.
26635
26636     'wz'
26637          Floating point register if the LFIWZX instruction is enabled
26638          or NO_REGS.
26639
26640     'wQ'
26641          A memory address that will work with the 'lq' and 'stq'
26642          instructions.
26643
26644     'h'
26645          'MQ', 'CTR', or 'LINK' register
26646
26647     'q'
26648          'MQ' register
26649
26650     'c'
26651          'CTR' register
26652
26653     'l'
26654          'LINK' register
26655
26656     'x'
26657          'CR' register (condition register) number 0
26658
26659     'y'
26660          'CR' register (condition register)
26661
26662     'z'
26663          'XER[CA]' carry bit (part of the XER register)
26664
26665     'I'
26666          Signed 16-bit constant
26667
26668     'J'
26669          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
26670          for 'SImode' constants)
26671
26672     'K'
26673          Unsigned 16-bit constant
26674
26675     'L'
26676          Signed 16-bit constant shifted left 16 bits
26677
26678     'M'
26679          Constant larger than 31
26680
26681     'N'
26682          Exact power of 2
26683
26684     'O'
26685          Zero
26686
26687     'P'
26688          Constant whose negation is a signed 16-bit constant
26689
26690     'G'
26691          Floating point constant that can be loaded into a register
26692          with one instruction per word
26693
26694     'H'
26695          Integer/Floating point constant that can be loaded into a
26696          register using three instructions
26697
26698     'm'
26699          Memory operand.  Normally, 'm' does not allow addresses that
26700          update the base register.  If '<' or '>' constraint is also
26701          used, they are allowed and therefore on PowerPC targets in
26702          that case it is only safe to use 'm<>' in an 'asm' statement
26703          if that 'asm' statement accesses the operand exactly once.
26704          The 'asm' statement must also use '%U<OPNO>' as a placeholder
26705          for the "update" flag in the corresponding load or store
26706          instruction.  For example:
26707
26708               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
26709
26710          is correct but:
26711
26712               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
26713
26714          is not.
26715
26716     'es'
26717          A "stable" memory operand; that is, one which does not include
26718          any automodification of the base register.  This used to be
26719          useful when 'm' allowed automodification of the base register,
26720          but as those are now only allowed when '<' or '>' is used,
26721          'es' is basically the same as 'm' without '<' and '>'.
26722
26723     'Q'
26724          Memory operand that is an offset from a register (it is
26725          usually better to use 'm' or 'es' in 'asm' statements)
26726
26727     'Z'
26728          Memory operand that is an indexed or indirect from a register
26729          (it is usually better to use 'm' or 'es' in 'asm' statements)
26730
26731     'R'
26732          AIX TOC entry
26733
26734     'a'
26735          Address operand that is an indexed or indirect from a register
26736          ('p' is preferable for 'asm' statements)
26737
26738     'S'
26739          Constant suitable as a 64-bit mask operand
26740
26741     'T'
26742          Constant suitable as a 32-bit mask operand
26743
26744     'U'
26745          System V Release 4 small data area reference
26746
26747     't'
26748          AND masks that can be performed by two rldic{l, r}
26749          instructions
26750
26751     'W'
26752          Vector constant that does not require memory
26753
26754     'j'
26755          Vector constant that is all zeros.
26756
26757_Intel 386--'config/i386/constraints.md'_
26758     'R'
26759          Legacy register--the eight integer registers available on all
26760          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
26761
26762     'q'
26763          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
26764          'c', and 'd'; in 64-bit mode, any integer register.
26765
26766     'Q'
26767          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
26768
26769     'a'
26770          The 'a' register.
26771
26772     'b'
26773          The 'b' register.
26774
26775     'c'
26776          The 'c' register.
26777
26778     'd'
26779          The 'd' register.
26780
26781     'S'
26782          The 'si' register.
26783
26784     'D'
26785          The 'di' register.
26786
26787     'A'
26788          The 'a' and 'd' registers.  This class is used for
26789          instructions that return double word results in the 'ax:dx'
26790          register pair.  Single word values will be allocated either in
26791          'ax' or 'dx'.  For example on i386 the following implements
26792          'rdtsc':
26793
26794               unsigned long long rdtsc (void)
26795               {
26796                 unsigned long long tick;
26797                 __asm__ __volatile__("rdtsc":"=A"(tick));
26798                 return tick;
26799               }
26800
26801          This is not correct on x86_64 as it would allocate tick in
26802          either 'ax' or 'dx'.  You have to use the following variant
26803          instead:
26804
26805               unsigned long long rdtsc (void)
26806               {
26807                 unsigned int tickl, tickh;
26808                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
26809                 return ((unsigned long long)tickh << 32)|tickl;
26810               }
26811
26812     'f'
26813          Any 80387 floating-point (stack) register.
26814
26815     't'
26816          Top of 80387 floating-point stack ('%st(0)').
26817
26818     'u'
26819          Second from top of 80387 floating-point stack ('%st(1)').
26820
26821     'y'
26822          Any MMX register.
26823
26824     'x'
26825          Any SSE register.
26826
26827     'Yz'
26828          First SSE register ('%xmm0').
26829
26830     'I'
26831          Integer constant in the range 0 ... 31, for 32-bit shifts.
26832
26833     'J'
26834          Integer constant in the range 0 ... 63, for 64-bit shifts.
26835
26836     'K'
26837          Signed 8-bit integer constant.
26838
26839     'L'
26840          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
26841
26842     'M'
26843          0, 1, 2, or 3 (shifts for the 'lea' instruction).
26844
26845     'N'
26846          Unsigned 8-bit integer constant (for 'in' and 'out'
26847          instructions).
26848
26849     'G'
26850          Standard 80387 floating point constant.
26851
26852     'C'
26853          Standard SSE floating point constant.
26854
26855     'e'
26856          32-bit signed integer constant, or a symbolic reference known
26857          to fit that range (for immediate operands in sign-extending
26858          x86-64 instructions).
26859
26860     'Z'
26861          32-bit unsigned integer constant, or a symbolic reference
26862          known to fit that range (for immediate operands in
26863          zero-extending x86-64 instructions).
26864
26865_Intel IA-64--'config/ia64/ia64.h'_
26866     'a'
26867          General register 'r0' to 'r3' for 'addl' instruction
26868
26869     'b'
26870          Branch register
26871
26872     'c'
26873          Predicate register ('c' as in "conditional")
26874
26875     'd'
26876          Application register residing in M-unit
26877
26878     'e'
26879          Application register residing in I-unit
26880
26881     'f'
26882          Floating-point register
26883
26884     'm'
26885          Memory operand.  If used together with '<' or '>', the operand
26886          can have postincrement and postdecrement which require
26887          printing with '%Pn' on IA-64.
26888
26889     'G'
26890          Floating-point constant 0.0 or 1.0
26891
26892     'I'
26893          14-bit signed integer constant
26894
26895     'J'
26896          22-bit signed integer constant
26897
26898     'K'
26899          8-bit signed integer constant for logical instructions
26900
26901     'L'
26902          8-bit adjusted signed integer constant for compare pseudo-ops
26903
26904     'M'
26905          6-bit unsigned integer constant for shift counts
26906
26907     'N'
26908          9-bit signed integer constant for load and store
26909          postincrements
26910
26911     'O'
26912          The constant zero
26913
26914     'P'
26915          0 or -1 for 'dep' instruction
26916
26917     'Q'
26918          Non-volatile memory for floating-point loads and stores
26919
26920     'R'
26921          Integer constant in the range 1 to 4 for 'shladd' instruction
26922
26923     'S'
26924          Memory operand except postincrement and postdecrement.  This
26925          is now roughly the same as 'm' when not used together with '<'
26926          or '>'.
26927
26928_FRV--'config/frv/frv.h'_
26929     'a'
26930          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
26931
26932     'b'
26933          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
26934
26935     'c'
26936          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
26937          to 'icc3').
26938
26939     'd'
26940          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
26941
26942     'e'
26943          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
26944          registers are excluded not in the class but through the use of
26945          a machine mode larger than 4 bytes.
26946
26947     'f'
26948          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
26949
26950     'h'
26951          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
26952          registers are excluded not in the class but through the use of
26953          a machine mode larger than 4 bytes.
26954
26955     'l'
26956          Register in the class 'LR_REG' (the 'lr' register).
26957
26958     'q'
26959          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
26960          numbers not divisible by 4 are excluded not in the class but
26961          through the use of a machine mode larger than 8 bytes.
26962
26963     't'
26964          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
26965
26966     'u'
26967          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
26968
26969     'v'
26970          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
26971
26972     'w'
26973          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
26974
26975     'x'
26976          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
26977          Register numbers not divisible by 4 are excluded not in the
26978          class but through the use of a machine mode larger than 8
26979          bytes.
26980
26981     'z'
26982          Register in the class 'SPR_REGS' ('lcr' and 'lr').
26983
26984     'A'
26985          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
26986
26987     'B'
26988          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
26989
26990     'C'
26991          Register in the class 'CR_REGS' ('cc0' to 'cc7').
26992
26993     'G'
26994          Floating point constant zero
26995
26996     'I'
26997          6-bit signed integer constant
26998
26999     'J'
27000          10-bit signed integer constant
27001
27002     'L'
27003          16-bit signed integer constant
27004
27005     'M'
27006          16-bit unsigned integer constant
27007
27008     'N'
27009          12-bit signed integer constant that is negative--i.e. in the
27010          range of -2048 to -1
27011
27012     'O'
27013          Constant zero
27014
27015     'P'
27016          12-bit signed integer constant that is greater than zero--i.e.
27017          in the range of 1 to 2047.
27018
27019_Blackfin family--'config/bfin/constraints.md'_
27020     'a'
27021          P register
27022
27023     'd'
27024          D register
27025
27026     'z'
27027          A call clobbered P register.
27028
27029     'qN'
27030          A single register.  If N is in the range 0 to 7, the
27031          corresponding D register.  If it is 'A', then the register P0.
27032
27033     'D'
27034          Even-numbered D register
27035
27036     'W'
27037          Odd-numbered D register
27038
27039     'e'
27040          Accumulator register.
27041
27042     'A'
27043          Even-numbered accumulator register.
27044
27045     'B'
27046          Odd-numbered accumulator register.
27047
27048     'b'
27049          I register
27050
27051     'v'
27052          B register
27053
27054     'f'
27055          M register
27056
27057     'c'
27058          Registers used for circular buffering, i.e.  I, B, or L
27059          registers.
27060
27061     'C'
27062          The CC register.
27063
27064     't'
27065          LT0 or LT1.
27066
27067     'k'
27068          LC0 or LC1.
27069
27070     'u'
27071          LB0 or LB1.
27072
27073     'x'
27074          Any D, P, B, M, I or L register.
27075
27076     'y'
27077          Additional registers typically used only in prologues and
27078          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
27079          USP.
27080
27081     'w'
27082          Any register except accumulators or CC.
27083
27084     'Ksh'
27085          Signed 16 bit integer (in the range -32768 to 32767)
27086
27087     'Kuh'
27088          Unsigned 16 bit integer (in the range 0 to 65535)
27089
27090     'Ks7'
27091          Signed 7 bit integer (in the range -64 to 63)
27092
27093     'Ku7'
27094          Unsigned 7 bit integer (in the range 0 to 127)
27095
27096     'Ku5'
27097          Unsigned 5 bit integer (in the range 0 to 31)
27098
27099     'Ks4'
27100          Signed 4 bit integer (in the range -8 to 7)
27101
27102     'Ks3'
27103          Signed 3 bit integer (in the range -3 to 4)
27104
27105     'Ku3'
27106          Unsigned 3 bit integer (in the range 0 to 7)
27107
27108     'PN'
27109          Constant N, where N is a single-digit constant in the range 0
27110          to 4.
27111
27112     'PA'
27113          An integer equal to one of the MACFLAG_XXX constants that is
27114          suitable for use with either accumulator.
27115
27116     'PB'
27117          An integer equal to one of the MACFLAG_XXX constants that is
27118          suitable for use only with accumulator A1.
27119
27120     'M1'
27121          Constant 255.
27122
27123     'M2'
27124          Constant 65535.
27125
27126     'J'
27127          An integer constant with exactly a single bit set.
27128
27129     'L'
27130          An integer constant with all bits set except exactly one.
27131
27132     'H'
27133
27134     'Q'
27135          Any SYMBOL_REF.
27136
27137_M32C--'config/m32c/m32c.c'_
27138     'Rsp'
27139     'Rfb'
27140     'Rsb'
27141          '$sp', '$fb', '$sb'.
27142
27143     'Rcr'
27144          Any control register, when they're 16 bits wide (nothing if
27145          control registers are 24 bits wide)
27146
27147     'Rcl'
27148          Any control register, when they're 24 bits wide.
27149
27150     'R0w'
27151     'R1w'
27152     'R2w'
27153     'R3w'
27154          $r0, $r1, $r2, $r3.
27155
27156     'R02'
27157          $r0 or $r2, or $r2r0 for 32 bit values.
27158
27159     'R13'
27160          $r1 or $r3, or $r3r1 for 32 bit values.
27161
27162     'Rdi'
27163          A register that can hold a 64 bit value.
27164
27165     'Rhl'
27166          $r0 or $r1 (registers with addressable high/low bytes)
27167
27168     'R23'
27169          $r2 or $r3
27170
27171     'Raa'
27172          Address registers
27173
27174     'Raw'
27175          Address registers when they're 16 bits wide.
27176
27177     'Ral'
27178          Address registers when they're 24 bits wide.
27179
27180     'Rqi'
27181          Registers that can hold QI values.
27182
27183     'Rad'
27184          Registers that can be used with displacements ($a0, $a1, $sb).
27185
27186     'Rsi'
27187          Registers that can hold 32 bit values.
27188
27189     'Rhi'
27190          Registers that can hold 16 bit values.
27191
27192     'Rhc'
27193          Registers chat can hold 16 bit values, including all control
27194          registers.
27195
27196     'Rra'
27197          $r0 through R1, plus $a0 and $a1.
27198
27199     'Rfl'
27200          The flags register.
27201
27202     'Rmm'
27203          The memory-based pseudo-registers $mem0 through $mem15.
27204
27205     'Rpi'
27206          Registers that can hold pointers (16 bit registers for r8c,
27207          m16c; 24 bit registers for m32cm, m32c).
27208
27209     'Rpa'
27210          Matches multiple registers in a PARALLEL to form a larger
27211          register.  Used to match function return values.
27212
27213     'Is3'
27214          -8 ... 7
27215
27216     'IS1'
27217          -128 ... 127
27218
27219     'IS2'
27220          -32768 ... 32767
27221
27222     'IU2'
27223          0 ... 65535
27224
27225     'In4'
27226          -8 ... -1 or 1 ... 8
27227
27228     'In5'
27229          -16 ... -1 or 1 ... 16
27230
27231     'In6'
27232          -32 ... -1 or 1 ... 32
27233
27234     'IM2'
27235          -65536 ... -1
27236
27237     'Ilb'
27238          An 8 bit value with exactly one bit set.
27239
27240     'Ilw'
27241          A 16 bit value with exactly one bit set.
27242
27243     'Sd'
27244          The common src/dest memory addressing modes.
27245
27246     'Sa'
27247          Memory addressed using $a0 or $a1.
27248
27249     'Si'
27250          Memory addressed with immediate addresses.
27251
27252     'Ss'
27253          Memory addressed using the stack pointer ($sp).
27254
27255     'Sf'
27256          Memory addressed using the frame base register ($fb).
27257
27258     'Ss'
27259          Memory addressed using the small base register ($sb).
27260
27261     'S1'
27262          $r1h
27263
27264_MeP--'config/mep/constraints.md'_
27265
27266     'a'
27267          The $sp register.
27268
27269     'b'
27270          The $tp register.
27271
27272     'c'
27273          Any control register.
27274
27275     'd'
27276          Either the $hi or the $lo register.
27277
27278     'em'
27279          Coprocessor registers that can be directly loaded ($c0-$c15).
27280
27281     'ex'
27282          Coprocessor registers that can be moved to each other.
27283
27284     'er'
27285          Coprocessor registers that can be moved to core registers.
27286
27287     'h'
27288          The $hi register.
27289
27290     'j'
27291          The $rpc register.
27292
27293     'l'
27294          The $lo register.
27295
27296     't'
27297          Registers which can be used in $tp-relative addressing.
27298
27299     'v'
27300          The $gp register.
27301
27302     'x'
27303          The coprocessor registers.
27304
27305     'y'
27306          The coprocessor control registers.
27307
27308     'z'
27309          The $0 register.
27310
27311     'A'
27312          User-defined register set A.
27313
27314     'B'
27315          User-defined register set B.
27316
27317     'C'
27318          User-defined register set C.
27319
27320     'D'
27321          User-defined register set D.
27322
27323     'I'
27324          Offsets for $gp-rel addressing.
27325
27326     'J'
27327          Constants that can be used directly with boolean insns.
27328
27329     'K'
27330          Constants that can be moved directly to registers.
27331
27332     'L'
27333          Small constants that can be added to registers.
27334
27335     'M'
27336          Long shift counts.
27337
27338     'N'
27339          Small constants that can be compared to registers.
27340
27341     'O'
27342          Constants that can be loaded into the top half of registers.
27343
27344     'S'
27345          Signed 8-bit immediates.
27346
27347     'T'
27348          Symbols encoded for $tp-rel or $gp-rel addressing.
27349
27350     'U'
27351          Non-constant addresses for loading/saving coprocessor
27352          registers.
27353
27354     'W'
27355          The top half of a symbol's value.
27356
27357     'Y'
27358          A register indirect address without offset.
27359
27360     'Z'
27361          Symbolic references to the control bus.
27362
27363_MicroBlaze--'config/microblaze/constraints.md'_
27364     'd'
27365          A general register ('r0' to 'r31').
27366
27367     'z'
27368          A status register ('rmsr', '$fcc1' to '$fcc7').
27369
27370_MIPS--'config/mips/constraints.md'_
27371     'd'
27372          An address register.  This is equivalent to 'r' unless
27373          generating MIPS16 code.
27374
27375     'f'
27376          A floating-point register (if available).
27377
27378     'h'
27379          Formerly the 'hi' register.  This constraint is no longer
27380          supported.
27381
27382     'l'
27383          The 'lo' register.  Use this register to store values that are
27384          no bigger than a word.
27385
27386     'x'
27387          The concatenated 'hi' and 'lo' registers.  Use this register
27388          to store doubleword values.
27389
27390     'c'
27391          A register suitable for use in an indirect jump.  This will
27392          always be '$25' for '-mabicalls'.
27393
27394     'v'
27395          Register '$3'.  Do not use this constraint in new code; it is
27396          retained only for compatibility with glibc.
27397
27398     'y'
27399          Equivalent to 'r'; retained for backwards compatibility.
27400
27401     'z'
27402          A floating-point condition code register.
27403
27404     'I'
27405          A signed 16-bit constant (for arithmetic instructions).
27406
27407     'J'
27408          Integer zero.
27409
27410     'K'
27411          An unsigned 16-bit constant (for logic instructions).
27412
27413     'L'
27414          A signed 32-bit constant in which the lower 16 bits are zero.
27415          Such constants can be loaded using 'lui'.
27416
27417     'M'
27418          A constant that cannot be loaded using 'lui', 'addiu' or
27419          'ori'.
27420
27421     'N'
27422          A constant in the range -65535 to -1 (inclusive).
27423
27424     'O'
27425          A signed 15-bit constant.
27426
27427     'P'
27428          A constant in the range 1 to 65535 (inclusive).
27429
27430     'G'
27431          Floating-point zero.
27432
27433     'R'
27434          An address that can be used in a non-macro load or store.
27435
27436_Motorola 680x0--'config/m68k/constraints.md'_
27437     'a'
27438          Address register
27439
27440     'd'
27441          Data register
27442
27443     'f'
27444          68881 floating-point register, if available
27445
27446     'I'
27447          Integer in the range 1 to 8
27448
27449     'J'
27450          16-bit signed number
27451
27452     'K'
27453          Signed number whose magnitude is greater than 0x80
27454
27455     'L'
27456          Integer in the range -8 to -1
27457
27458     'M'
27459          Signed number whose magnitude is greater than 0x100
27460
27461     'N'
27462          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
27463
27464     'O'
27465          16 (for rotate using swap)
27466
27467     'P'
27468          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
27469
27470     'R'
27471          Numbers that mov3q can handle
27472
27473     'G'
27474          Floating point constant that is not a 68881 constant
27475
27476     'S'
27477          Operands that satisfy 'm' when -mpcrel is in effect
27478
27479     'T'
27480          Operands that satisfy 's' when -mpcrel is not in effect
27481
27482     'Q'
27483          Address register indirect addressing mode
27484
27485     'U'
27486          Register offset addressing
27487
27488     'W'
27489          const_call_operand
27490
27491     'Cs'
27492          symbol_ref or const
27493
27494     'Ci'
27495          const_int
27496
27497     'C0'
27498          const_int 0
27499
27500     'Cj'
27501          Range of signed numbers that don't fit in 16 bits
27502
27503     'Cmvq'
27504          Integers valid for mvq
27505
27506     'Capsw'
27507          Integers valid for a moveq followed by a swap
27508
27509     'Cmvz'
27510          Integers valid for mvz
27511
27512     'Cmvs'
27513          Integers valid for mvs
27514
27515     'Ap'
27516          push_operand
27517
27518     'Ac'
27519          Non-register operands allowed in clr
27520
27521_Moxie--'config/moxie/constraints.md'_
27522     'A'
27523          An absolute address
27524
27525     'B'
27526          An offset address
27527
27528     'W'
27529          A register indirect memory operand
27530
27531     'I'
27532          A constant in the range of 0 to 255.
27533
27534     'N'
27535          A constant in the range of 0 to -255.
27536
27537_PDP-11--'config/pdp11/constraints.md'_
27538     'a'
27539          Floating point registers AC0 through AC3.  These can be loaded
27540          from/to memory with a single instruction.
27541
27542     'd'
27543          Odd numbered general registers (R1, R3, R5).  These are used
27544          for 16-bit multiply operations.
27545
27546     'f'
27547          Any of the floating point registers (AC0 through AC5).
27548
27549     'G'
27550          Floating point constant 0.
27551
27552     'I'
27553          An integer constant that fits in 16 bits.
27554
27555     'J'
27556          An integer constant whose low order 16 bits are zero.
27557
27558     'K'
27559          An integer constant that does not meet the constraints for
27560          codes 'I' or 'J'.
27561
27562     'L'
27563          The integer constant 1.
27564
27565     'M'
27566          The integer constant -1.
27567
27568     'N'
27569          The integer constant 0.
27570
27571     'O'
27572          Integer constants -4 through -1 and 1 through 4; shifts by
27573          these amounts are handled as multiple single-bit shifts rather
27574          than a single variable-length shift.
27575
27576     'Q'
27577          A memory reference which requires an additional word (address
27578          or offset) after the opcode.
27579
27580     'R'
27581          A memory reference that is encoded within the opcode.
27582
27583_RL78--'config/rl78/constraints.md'_
27584
27585     'Int3'
27586          An integer constant in the range 1 ... 7.
27587     'Int8'
27588          An integer constant in the range 0 ... 255.
27589     'J'
27590          An integer constant in the range -255 ... 0
27591     'K'
27592          The integer constant 1.
27593     'L'
27594          The integer constant -1.
27595     'M'
27596          The integer constant 0.
27597     'N'
27598          The integer constant 2.
27599     'O'
27600          The integer constant -2.
27601     'P'
27602          An integer constant in the range 1 ... 15.
27603     'Qbi'
27604          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
27605     'Qsc'
27606          The synthetic compare types-gt, lt, ge, and le.
27607     'Wab'
27608          A memory reference with an absolute address.
27609     'Wbc'
27610          A memory reference using 'BC' as a base register, with an
27611          optional offset.
27612     'Wca'
27613          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
27614          address, for calls.
27615     'Wcv'
27616          A memory reference using any 16-bit register pair for the
27617          address, for calls.
27618     'Wd2'
27619          A memory reference using 'DE' as a base register, with an
27620          optional offset.
27621     'Wde'
27622          A memory reference using 'DE' as a base register, without any
27623          offset.
27624     'Wfr'
27625          Any memory reference to an address in the far address space.
27626     'Wh1'
27627          A memory reference using 'HL' as a base register, with an
27628          optional one-byte offset.
27629     'Whb'
27630          A memory reference using 'HL' as a base register, with 'B' or
27631          'C' as the index register.
27632     'Whl'
27633          A memory reference using 'HL' as a base register, without any
27634          offset.
27635     'Ws1'
27636          A memory reference using 'SP' as a base register, with an
27637          optional one-byte offset.
27638     'Y'
27639          Any memory reference to an address in the near address space.
27640     'A'
27641          The 'AX' register.
27642     'B'
27643          The 'BC' register.
27644     'D'
27645          The 'DE' register.
27646     'R'
27647          'A' through 'L' registers.
27648     'S'
27649          The 'SP' register.
27650     'T'
27651          The 'HL' register.
27652     'Z08W'
27653          The 16-bit 'R8' register.
27654     'Z10W'
27655          The 16-bit 'R10' register.
27656     'Zint'
27657          The registers reserved for interrupts ('R24' to 'R31').
27658     'a'
27659          The 'A' register.
27660     'b'
27661          The 'B' register.
27662     'c'
27663          The 'C' register.
27664     'd'
27665          The 'D' register.
27666     'e'
27667          The 'E' register.
27668     'h'
27669          The 'H' register.
27670     'l'
27671          The 'L' register.
27672     'v'
27673          The virtual registers.
27674     'w'
27675          The 'PSW' register.
27676     'x'
27677          The 'X' register.
27678
27679_RX--'config/rx/constraints.md'_
27680     'Q'
27681          An address which does not involve register indirect addressing
27682          or pre/post increment/decrement addressing.
27683
27684     'Symbol'
27685          A symbol reference.
27686
27687     'Int08'
27688          A constant in the range -256 to 255, inclusive.
27689
27690     'Sint08'
27691          A constant in the range -128 to 127, inclusive.
27692
27693     'Sint16'
27694          A constant in the range -32768 to 32767, inclusive.
27695
27696     'Sint24'
27697          A constant in the range -8388608 to 8388607, inclusive.
27698
27699     'Uint04'
27700          A constant in the range 0 to 15, inclusive.
27701
27702_SPARC--'config/sparc/sparc.h'_
27703     'f'
27704          Floating-point register on the SPARC-V8 architecture and lower
27705          floating-point register on the SPARC-V9 architecture.
27706
27707     'e'
27708          Floating-point register.  It is equivalent to 'f' on the
27709          SPARC-V8 architecture and contains both lower and upper
27710          floating-point registers on the SPARC-V9 architecture.
27711
27712     'c'
27713          Floating-point condition code register.
27714
27715     'd'
27716          Lower floating-point register.  It is only valid on the
27717          SPARC-V9 architecture when the Visual Instruction Set is
27718          available.
27719
27720     'b'
27721          Floating-point register.  It is only valid on the SPARC-V9
27722          architecture when the Visual Instruction Set is available.
27723
27724     'h'
27725          64-bit global or out register for the SPARC-V8+ architecture.
27726
27727     'C'
27728          The constant all-ones, for floating-point.
27729
27730     'A'
27731          Signed 5-bit constant
27732
27733     'D'
27734          A vector constant
27735
27736     'I'
27737          Signed 13-bit constant
27738
27739     'J'
27740          Zero
27741
27742     'K'
27743          32-bit constant with the low 12 bits clear (a constant that
27744          can be loaded with the 'sethi' instruction)
27745
27746     'L'
27747          A constant in the range supported by 'movcc' instructions
27748          (11-bit signed immediate)
27749
27750     'M'
27751          A constant in the range supported by 'movrcc' instructions
27752          (10-bit signed immediate)
27753
27754     'N'
27755          Same as 'K', except that it verifies that bits that are not in
27756          the lower 32-bit range are all zero.  Must be used instead of
27757          'K' for modes wider than 'SImode'
27758
27759     'O'
27760          The constant 4096
27761
27762     'G'
27763          Floating-point zero
27764
27765     'H'
27766          Signed 13-bit constant, sign-extended to 32 or 64 bits
27767
27768     'P'
27769          The constant -1
27770
27771     'Q'
27772          Floating-point constant whose integral representation can be
27773          moved into an integer register using a single sethi
27774          instruction
27775
27776     'R'
27777          Floating-point constant whose integral representation can be
27778          moved into an integer register using a single mov instruction
27779
27780     'S'
27781          Floating-point constant whose integral representation can be
27782          moved into an integer register using a high/lo_sum instruction
27783          sequence
27784
27785     'T'
27786          Memory address aligned to an 8-byte boundary
27787
27788     'U'
27789          Even register
27790
27791     'W'
27792          Memory address for 'e' constraint registers
27793
27794     'w'
27795          Memory address with only a base register
27796
27797     'Y'
27798          Vector zero
27799
27800_SPU--'config/spu/spu.h'_
27801     'a'
27802          An immediate which can be loaded with the il/ila/ilh/ilhu
27803          instructions.  const_int is treated as a 64 bit value.
27804
27805     'c'
27806          An immediate for and/xor/or instructions.  const_int is
27807          treated as a 64 bit value.
27808
27809     'd'
27810          An immediate for the 'iohl' instruction.  const_int is treated
27811          as a 64 bit value.
27812
27813     'f'
27814          An immediate which can be loaded with 'fsmbi'.
27815
27816     'A'
27817          An immediate which can be loaded with the il/ila/ilh/ilhu
27818          instructions.  const_int is treated as a 32 bit value.
27819
27820     'B'
27821          An immediate for most arithmetic instructions.  const_int is
27822          treated as a 32 bit value.
27823
27824     'C'
27825          An immediate for and/xor/or instructions.  const_int is
27826          treated as a 32 bit value.
27827
27828     'D'
27829          An immediate for the 'iohl' instruction.  const_int is treated
27830          as a 32 bit value.
27831
27832     'I'
27833          A constant in the range [-64, 63] for shift/rotate
27834          instructions.
27835
27836     'J'
27837          An unsigned 7-bit constant for conversion/nop/channel
27838          instructions.
27839
27840     'K'
27841          A signed 10-bit constant for most arithmetic instructions.
27842
27843     'M'
27844          A signed 16 bit immediate for 'stop'.
27845
27846     'N'
27847          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
27848
27849     'O'
27850          An unsigned 7-bit constant whose 3 least significant bits are
27851          0.
27852
27853     'P'
27854          An unsigned 3-bit constant for 16-byte rotates and shifts
27855
27856     'R'
27857          Call operand, reg, for indirect calls
27858
27859     'S'
27860          Call operand, symbol, for relative calls.
27861
27862     'T'
27863          Call operand, const_int, for absolute calls.
27864
27865     'U'
27866          An immediate which can be loaded with the il/ila/ilh/ilhu
27867          instructions.  const_int is sign extended to 128 bit.
27868
27869     'W'
27870          An immediate for shift and rotate instructions.  const_int is
27871          treated as a 32 bit value.
27872
27873     'Y'
27874          An immediate for and/xor/or instructions.  const_int is sign
27875          extended as a 128 bit.
27876
27877     'Z'
27878          An immediate for the 'iohl' instruction.  const_int is sign
27879          extended to 128 bit.
27880
27881_S/390 and zSeries--'config/s390/s390.h'_
27882     'a'
27883          Address register (general purpose register except r0)
27884
27885     'c'
27886          Condition code register
27887
27888     'd'
27889          Data register (arbitrary general purpose register)
27890
27891     'f'
27892          Floating-point register
27893
27894     'I'
27895          Unsigned 8-bit constant (0-255)
27896
27897     'J'
27898          Unsigned 12-bit constant (0-4095)
27899
27900     'K'
27901          Signed 16-bit constant (-32768-32767)
27902
27903     'L'
27904          Value appropriate as displacement.
27905          '(0..4095)'
27906               for short displacement
27907          '(-524288..524287)'
27908               for long displacement
27909
27910     'M'
27911          Constant integer with a value of 0x7fffffff.
27912
27913     'N'
27914          Multiple letter constraint followed by 4 parameter letters.
27915          '0..9:'
27916               number of the part counting from most to least
27917               significant
27918          'H,Q:'
27919               mode of the part
27920          'D,S,H:'
27921               mode of the containing operand
27922          '0,F:'
27923               value of the other parts (F--all bits set)
27924          The constraint matches if the specified part of a constant has
27925          a value different from its other parts.
27926
27927     'Q'
27928          Memory reference without index register and with short
27929          displacement.
27930
27931     'R'
27932          Memory reference with index register and short displacement.
27933
27934     'S'
27935          Memory reference without index register but with long
27936          displacement.
27937
27938     'T'
27939          Memory reference with index register and long displacement.
27940
27941     'U'
27942          Pointer with short displacement.
27943
27944     'W'
27945          Pointer with long displacement.
27946
27947     'Y'
27948          Shift count operand.
27949
27950_Score family--'config/score/score.h'_
27951     'd'
27952          Registers from r0 to r32.
27953
27954     'e'
27955          Registers from r0 to r16.
27956
27957     't'
27958          r8--r11 or r22--r27 registers.
27959
27960     'h'
27961          hi register.
27962
27963     'l'
27964          lo register.
27965
27966     'x'
27967          hi + lo register.
27968
27969     'q'
27970          cnt register.
27971
27972     'y'
27973          lcb register.
27974
27975     'z'
27976          scb register.
27977
27978     'a'
27979          cnt + lcb + scb register.
27980
27981     'c'
27982          cr0--cr15 register.
27983
27984     'b'
27985          cp1 registers.
27986
27987     'f'
27988          cp2 registers.
27989
27990     'i'
27991          cp3 registers.
27992
27993     'j'
27994          cp1 + cp2 + cp3 registers.
27995
27996     'I'
27997          High 16-bit constant (32-bit constant with 16 LSBs zero).
27998
27999     'J'
28000          Unsigned 5 bit integer (in the range 0 to 31).
28001
28002     'K'
28003          Unsigned 16 bit integer (in the range 0 to 65535).
28004
28005     'L'
28006          Signed 16 bit integer (in the range -32768 to 32767).
28007
28008     'M'
28009          Unsigned 14 bit integer (in the range 0 to 16383).
28010
28011     'N'
28012          Signed 14 bit integer (in the range -8192 to 8191).
28013
28014     'Z'
28015          Any SYMBOL_REF.
28016
28017_Xstormy16--'config/stormy16/stormy16.h'_
28018     'a'
28019          Register r0.
28020
28021     'b'
28022          Register r1.
28023
28024     'c'
28025          Register r2.
28026
28027     'd'
28028          Register r8.
28029
28030     'e'
28031          Registers r0 through r7.
28032
28033     't'
28034          Registers r0 and r1.
28035
28036     'y'
28037          The carry register.
28038
28039     'z'
28040          Registers r8 and r9.
28041
28042     'I'
28043          A constant between 0 and 3 inclusive.
28044
28045     'J'
28046          A constant that has exactly one bit set.
28047
28048     'K'
28049          A constant that has exactly one bit clear.
28050
28051     'L'
28052          A constant between 0 and 255 inclusive.
28053
28054     'M'
28055          A constant between -255 and 0 inclusive.
28056
28057     'N'
28058          A constant between -3 and 0 inclusive.
28059
28060     'O'
28061          A constant between 1 and 4 inclusive.
28062
28063     'P'
28064          A constant between -4 and -1 inclusive.
28065
28066     'Q'
28067          A memory reference that is a stack push.
28068
28069     'R'
28070          A memory reference that is a stack pop.
28071
28072     'S'
28073          A memory reference that refers to a constant address of known
28074          value.
28075
28076     'T'
28077          The register indicated by Rx (not implemented yet).
28078
28079     'U'
28080          A constant that is not between 2 and 15 inclusive.
28081
28082     'Z'
28083          The constant 0.
28084
28085_TI C6X family--'config/c6x/constraints.md'_
28086     'a'
28087          Register file A (A0-A31).
28088
28089     'b'
28090          Register file B (B0-B31).
28091
28092     'A'
28093          Predicate registers in register file A (A0-A2 on C64X and
28094          higher, A1 and A2 otherwise).
28095
28096     'B'
28097          Predicate registers in register file B (B0-B2).
28098
28099     'C'
28100          A call-used register in register file B (B0-B9, B16-B31).
28101
28102     'Da'
28103          Register file A, excluding predicate registers (A3-A31, plus
28104          A0 if not C64X or higher).
28105
28106     'Db'
28107          Register file B, excluding predicate registers (B3-B31).
28108
28109     'Iu4'
28110          Integer constant in the range 0 ... 15.
28111
28112     'Iu5'
28113          Integer constant in the range 0 ... 31.
28114
28115     'In5'
28116          Integer constant in the range -31 ... 0.
28117
28118     'Is5'
28119          Integer constant in the range -16 ... 15.
28120
28121     'I5x'
28122          Integer constant that can be the operand of an ADDA or a SUBA
28123          insn.
28124
28125     'IuB'
28126          Integer constant in the range 0 ... 65535.
28127
28128     'IsB'
28129          Integer constant in the range -32768 ... 32767.
28130
28131     'IsC'
28132          Integer constant in the range -2^{20} ... 2^{20} - 1.
28133
28134     'Jc'
28135          Integer constant that is a valid mask for the clr instruction.
28136
28137     'Js'
28138          Integer constant that is a valid mask for the set instruction.
28139
28140     'Q'
28141          Memory location with A base register.
28142
28143     'R'
28144          Memory location with B base register.
28145
28146     'Z'
28147          Register B14 (aka DP).
28148
28149_TILE-Gx--'config/tilegx/constraints.md'_
28150     'R00'
28151     'R01'
28152     'R02'
28153     'R03'
28154     'R04'
28155     'R05'
28156     'R06'
28157     'R07'
28158     'R08'
28159     'R09'
28160     'R10'
28161          Each of these represents a register constraint for an
28162          individual register, from r0 to r10.
28163
28164     'I'
28165          Signed 8-bit integer constant.
28166
28167     'J'
28168          Signed 16-bit integer constant.
28169
28170     'K'
28171          Unsigned 16-bit integer constant.
28172
28173     'L'
28174          Integer constant that fits in one signed byte when incremented
28175          by one (-129 ... 126).
28176
28177     'm'
28178          Memory operand.  If used together with '<' or '>', the operand
28179          can have postincrement which requires printing with '%In' and
28180          '%in' on TILE-Gx.  For example:
28181
28182               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
28183
28184     'M'
28185          A bit mask suitable for the BFINS instruction.
28186
28187     'N'
28188          Integer constant that is a byte tiled out eight times.
28189
28190     'O'
28191          The integer zero constant.
28192
28193     'P'
28194          Integer constant that is a sign-extended byte tiled out as
28195          four shorts.
28196
28197     'Q'
28198          Integer constant that fits in one signed byte when incremented
28199          (-129 ... 126), but excluding -1.
28200
28201     'S'
28202          Integer constant that has all 1 bits consecutive and starting
28203          at bit 0.
28204
28205     'T'
28206          A 16-bit fragment of a got, tls, or pc-relative reference.
28207
28208     'U'
28209          Memory operand except postincrement.  This is roughly the same
28210          as 'm' when not used together with '<' or '>'.
28211
28212     'W'
28213          An 8-element vector constant with identical elements.
28214
28215     'Y'
28216          A 4-element vector constant with identical elements.
28217
28218     'Z0'
28219          The integer constant 0xffffffff.
28220
28221     'Z1'
28222          The integer constant 0xffffffff00000000.
28223
28224_TILEPro--'config/tilepro/constraints.md'_
28225     'R00'
28226     'R01'
28227     'R02'
28228     'R03'
28229     'R04'
28230     'R05'
28231     'R06'
28232     'R07'
28233     'R08'
28234     'R09'
28235     'R10'
28236          Each of these represents a register constraint for an
28237          individual register, from r0 to r10.
28238
28239     'I'
28240          Signed 8-bit integer constant.
28241
28242     'J'
28243          Signed 16-bit integer constant.
28244
28245     'K'
28246          Nonzero integer constant with low 16 bits zero.
28247
28248     'L'
28249          Integer constant that fits in one signed byte when incremented
28250          by one (-129 ... 126).
28251
28252     'm'
28253          Memory operand.  If used together with '<' or '>', the operand
28254          can have postincrement which requires printing with '%In' and
28255          '%in' on TILEPro.  For example:
28256
28257               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
28258
28259     'M'
28260          A bit mask suitable for the MM instruction.
28261
28262     'N'
28263          Integer constant that is a byte tiled out four times.
28264
28265     'O'
28266          The integer zero constant.
28267
28268     'P'
28269          Integer constant that is a sign-extended byte tiled out as two
28270          shorts.
28271
28272     'Q'
28273          Integer constant that fits in one signed byte when incremented
28274          (-129 ... 126), but excluding -1.
28275
28276     'T'
28277          A symbolic operand, or a 16-bit fragment of a got, tls, or
28278          pc-relative reference.
28279
28280     'U'
28281          Memory operand except postincrement.  This is roughly the same
28282          as 'm' when not used together with '<' or '>'.
28283
28284     'W'
28285          A 4-element vector constant with identical elements.
28286
28287     'Y'
28288          A 2-element vector constant with identical elements.
28289
28290_Xtensa--'config/xtensa/constraints.md'_
28291     'a'
28292          General-purpose 32-bit register
28293
28294     'b'
28295          One-bit boolean register
28296
28297     'A'
28298          MAC16 40-bit accumulator register
28299
28300     'I'
28301          Signed 12-bit integer constant, for use in MOVI instructions
28302
28303     'J'
28304          Signed 8-bit integer constant, for use in ADDI instructions
28305
28306     'K'
28307          Integer constant valid for BccI instructions
28308
28309     'L'
28310          Unsigned constant valid for BccUI instructions
28311
28312
28313File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
28314
283156.43 Controlling Names Used in Assembler Code
28316=============================================
28317
28318You can specify the name to be used in the assembler code for a C
28319function or variable by writing the 'asm' (or '__asm__') keyword after
28320the declarator as follows:
28321
28322     int foo asm ("myfoo") = 2;
28323
28324This specifies that the name to be used for the variable 'foo' in the
28325assembler code should be 'myfoo' rather than the usual '_foo'.
28326
28327 On systems where an underscore is normally prepended to the name of a C
28328function or variable, this feature allows you to define names for the
28329linker that do not start with an underscore.
28330
28331 It does not make sense to use this feature with a non-static local
28332variable since such variables do not have assembler names.  If you are
28333trying to put the variable in a particular register, see *note Explicit
28334Reg Vars::.  GCC presently accepts such code with a warning, but will
28335probably be changed to issue an error, rather than a warning, in the
28336future.
28337
28338 You cannot use 'asm' in this way in a function _definition_; but you
28339can get the same effect by writing a declaration for the function before
28340its definition and putting 'asm' there, like this:
28341
28342     extern func () asm ("FUNC");
28343
28344     func (x, y)
28345          int x, y;
28346     /* ... */
28347
28348 It is up to you to make sure that the assembler names you choose do not
28349conflict with any other assembler symbols.  Also, you must not use a
28350register name; that would produce completely invalid assembler code.
28351GCC does not as yet have the ability to store static variables in
28352registers.  Perhaps that will be added.
28353
28354
28355File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
28356
283576.44 Variables in Specified Registers
28358=====================================
28359
28360GNU C allows you to put a few global variables into specified hardware
28361registers.  You can also specify the register in which an ordinary
28362register variable should be allocated.
28363
28364   * Global register variables reserve registers throughout the program.
28365     This may be useful in programs such as programming language
28366     interpreters that have a couple of global variables that are
28367     accessed very often.
28368
28369   * Local register variables in specific registers do not reserve the
28370     registers, except at the point where they are used as input or
28371     output operands in an 'asm' statement and the 'asm' statement
28372     itself is not deleted.  The compiler's data flow analysis is
28373     capable of determining where the specified registers contain live
28374     values, and where they are available for other uses.  Stores into
28375     local register variables may be deleted when they appear to be dead
28376     according to dataflow analysis.  References to local register
28377     variables may be deleted or moved or simplified.
28378
28379     These local variables are sometimes convenient for use with the
28380     extended 'asm' feature (*note Extended Asm::), if you want to write
28381     one output of the assembler instruction directly into a particular
28382     register.  (This works provided the register you specify fits the
28383     constraints specified for that operand in the 'asm'.)
28384
28385* Menu:
28386
28387* Global Reg Vars::
28388* Local Reg Vars::
28389
28390
28391File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
28392
283936.44.1 Defining Global Register Variables
28394-----------------------------------------
28395
28396You can define a global register variable in GNU C like this:
28397
28398     register int *foo asm ("a5");
28399
28400Here 'a5' is the name of the register that should be used.  Choose a
28401register that is normally saved and restored by function calls on your
28402machine, so that library routines will not clobber it.
28403
28404 Naturally the register name is cpu-dependent, so you need to
28405conditionalize your program according to cpu type.  The register 'a5' is
28406a good choice on a 68000 for a variable of pointer type.  On machines
28407with register windows, be sure to choose a "global" register that is not
28408affected magically by the function call mechanism.
28409
28410 In addition, different operating systems on the same CPU may differ in
28411how they name the registers; then you need additional conditionals.  For
28412example, some 68000 operating systems call this register '%a5'.
28413
28414 Eventually there may be a way of asking the compiler to choose a
28415register automatically, but first we need to figure out how it should
28416choose and how to enable you to guide the choice.  No solution is
28417evident.
28418
28419 Defining a global register variable in a certain register reserves that
28420register entirely for this use, at least within the current compilation.
28421The register is not allocated for any other purpose in the functions in
28422the current compilation, and is not saved and restored by these
28423functions.  Stores into this register are never deleted even if they
28424appear to be dead, but references may be deleted or moved or simplified.
28425
28426 It is not safe to access the global register variables from signal
28427handlers, or from more than one thread of control, because the system
28428library routines may temporarily use the register for other things
28429(unless you recompile them specially for the task at hand).
28430
28431 It is not safe for one function that uses a global register variable to
28432call another such function 'foo' by way of a third function 'lose' that
28433is compiled without knowledge of this variable (i.e. in a different
28434source file in which the variable isn't declared).  This is because
28435'lose' might save the register and put some other value there.  For
28436example, you can't expect a global register variable to be available in
28437the comparison-function that you pass to 'qsort', since 'qsort' might
28438have put something else in that register.  (If you are prepared to
28439recompile 'qsort' with the same global register variable, you can solve
28440this problem.)
28441
28442 If you want to recompile 'qsort' or other source files that do not
28443actually use your global register variable, so that they do not use that
28444register for any other purpose, then it suffices to specify the compiler
28445option '-ffixed-REG'.  You need not actually add a global register
28446declaration to their source code.
28447
28448 A function that can alter the value of a global register variable
28449cannot safely be called from a function compiled without this variable,
28450because it could clobber the value the caller expects to find there on
28451return.  Therefore, the function that is the entry point into the part
28452of the program that uses the global register variable must explicitly
28453save and restore the value that belongs to its caller.
28454
28455 On most machines, 'longjmp' restores to each global register variable
28456the value it had at the time of the 'setjmp'.  On some machines,
28457however, 'longjmp' does not change the value of global register
28458variables.  To be portable, the function that called 'setjmp' should
28459make other arrangements to save the values of the global register
28460variables, and to restore them in a 'longjmp'.  This way, the same thing
28461happens regardless of what 'longjmp' does.
28462
28463 All global register variable declarations must precede all function
28464definitions.  If such a declaration could appear after function
28465definitions, the declaration would be too late to prevent the register
28466from being used for other purposes in the preceding functions.
28467
28468 Global register variables may not have initial values, because an
28469executable file has no means to supply initial contents for a register.
28470
28471 On the SPARC, there are reports that g3 ... g7 are suitable registers,
28472but certain library functions, such as 'getwd', as well as the
28473subroutines for division and remainder, modify g3 and g4.  g1 and g2 are
28474local temporaries.
28475
28476 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
28477course, it does not do to use more than a few of those.
28478
28479
28480File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
28481
284826.44.2 Specifying Registers for Local Variables
28483-----------------------------------------------
28484
28485You can define a local register variable with a specified register like
28486this:
28487
28488     register int *foo asm ("a5");
28489
28490Here 'a5' is the name of the register that should be used.  Note that
28491this is the same syntax used for defining global register variables, but
28492for a local variable it appears within a function.
28493
28494 Naturally the register name is cpu-dependent, but this is not a
28495problem, since specific registers are most often useful with explicit
28496assembler instructions (*note Extended Asm::).  Both of these things
28497generally require that you conditionalize your program according to cpu
28498type.
28499
28500 In addition, operating systems on one type of cpu may differ in how
28501they name the registers; then you need additional conditionals.  For
28502example, some 68000 operating systems call this register '%a5'.
28503
28504 Defining such a register variable does not reserve the register; it
28505remains available for other uses in places where flow control determines
28506the variable's value is not live.
28507
28508 This option does not guarantee that GCC generates code that has this
28509variable in the register you specify at all times.  You may not code an
28510explicit reference to this register in the _assembler instruction
28511template_ part of an 'asm' statement and assume it always refers to this
28512variable.  However, using the variable as an 'asm' _operand_ guarantees
28513that the specified register is used for the operand.
28514
28515 Stores into local register variables may be deleted when they appear to
28516be dead according to dataflow analysis.  References to local register
28517variables may be deleted or moved or simplified.
28518
28519 As for global register variables, it's recommended that you choose a
28520register that is normally saved and restored by function calls on your
28521machine, so that library routines will not clobber it.  A common pitfall
28522is to initialize multiple call-clobbered registers with arbitrary
28523expressions, where a function call or library call for an arithmetic
28524operator overwrites a register value from a previous assignment, for
28525example 'r0' below:
28526     register int *p1 asm ("r0") = ...;
28527     register int *p2 asm ("r1") = ...;
28528
28529In those cases, a solution is to use a temporary variable for each
28530arbitrary expression.  *Note Example of asm with clobbered asm reg::.
28531
28532
28533File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
28534
285356.45 Alternate Keywords
28536=======================
28537
28538'-ansi' and the various '-std' options disable certain keywords.  This
28539causes trouble when you want to use GNU C extensions, or a
28540general-purpose header file that should be usable by all programs,
28541including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
28542not available in programs compiled with '-ansi' or '-std' (although
28543'inline' can be used in a program compiled with '-std=c99' or
28544'-std=c11').  The ISO C99 keyword 'restrict' is only available when
28545'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
28546the equivalent '-std=iso9899:1999'), or an option for a later standard
28547version, is used.
28548
28549 The way to solve these problems is to put '__' at the beginning and end
28550of each problematical keyword.  For example, use '__asm__' instead of
28551'asm', and '__inline__' instead of 'inline'.
28552
28553 Other C compilers won't accept these alternative keywords; if you want
28554to compile with another compiler, you can define the alternate keywords
28555as macros to replace them with the customary keywords.  It looks like
28556this:
28557
28558     #ifndef __GNUC__
28559     #define __asm__ asm
28560     #endif
28561
28562 '-pedantic' and other options cause warnings for many GNU C extensions.
28563You can prevent such warnings within one expression by writing
28564'__extension__' before the expression.  '__extension__' has no effect
28565aside from this.
28566
28567
28568File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
28569
285706.46 Incomplete 'enum' Types
28571============================
28572
28573You can define an 'enum' tag without specifying its possible values.
28574This results in an incomplete type, much like what you get if you write
28575'struct foo' without describing the elements.  A later declaration that
28576does specify the possible values completes the type.
28577
28578 You can't allocate variables or storage using the type while it is
28579incomplete.  However, you can work with pointers to that type.
28580
28581 This extension may not be very useful, but it makes the handling of
28582'enum' more consistent with the way 'struct' and 'union' are handled.
28583
28584 This extension is not supported by GNU C++.
28585
28586
28587File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
28588
285896.47 Function Names as Strings
28590==============================
28591
28592GCC provides three magic variables that hold the name of the current
28593function, as a string.  The first of these is '__func__', which is part
28594of the C99 standard:
28595
28596 The identifier '__func__' is implicitly declared by the translator as
28597if, immediately following the opening brace of each function definition,
28598the declaration
28599
28600     static const char __func__[] = "function-name";
28601
28602appeared, where function-name is the name of the lexically-enclosing
28603function.  This name is the unadorned name of the function.
28604
28605 '__FUNCTION__' is another name for '__func__'.  Older versions of GCC
28606recognize only this name.  However, it is not standardized.  For maximum
28607portability, we recommend you use '__func__', but provide a fallback
28608definition with the preprocessor:
28609
28610     #if __STDC_VERSION__ < 199901L
28611     # if __GNUC__ >= 2
28612     #  define __func__ __FUNCTION__
28613     # else
28614     #  define __func__ "<unknown>"
28615     # endif
28616     #endif
28617
28618 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'.
28619However, in C++, '__PRETTY_FUNCTION__' contains the type signature of
28620the function as well as its bare name.  For example, this program:
28621
28622     extern "C" {
28623     extern int printf (char *, ...);
28624     }
28625
28626     class a {
28627      public:
28628       void sub (int i)
28629         {
28630           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
28631           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
28632         }
28633     };
28634
28635     int
28636     main (void)
28637     {
28638       a ax;
28639       ax.sub (0);
28640       return 0;
28641     }
28642
28643gives this output:
28644
28645     __FUNCTION__ = sub
28646     __PRETTY_FUNCTION__ = void a::sub(int)
28647
28648 These identifiers are not preprocessor macros.  In GCC 3.3 and earlier,
28649in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as
28650string literals; they could be used to initialize 'char' arrays, and
28651they could be concatenated with other string literals.  GCC 3.4 and
28652later treat them as variables, like '__func__'.  In C++, '__FUNCTION__'
28653and '__PRETTY_FUNCTION__' have always been variables.
28654
28655
28656File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
28657
286586.48 Getting the Return or Frame Address of a Function
28659======================================================
28660
28661These functions may be used to get information about the callers of a
28662function.
28663
28664 -- Built-in Function: void * __builtin_return_address (unsigned int
28665          LEVEL)
28666     This function returns the return address of the current function,
28667     or of one of its callers.  The LEVEL argument is number of frames
28668     to scan up the call stack.  A value of '0' yields the return
28669     address of the current function, a value of '1' yields the return
28670     address of the caller of the current function, and so forth.  When
28671     inlining the expected behavior is that the function returns the
28672     address of the function that is returned to.  To work around this
28673     behavior use the 'noinline' function attribute.
28674
28675     The LEVEL argument must be a constant integer.
28676
28677     On some machines it may be impossible to determine the return
28678     address of any function other than the current one; in such cases,
28679     or when the top of the stack has been reached, this function
28680     returns '0' or a random value.  In addition,
28681     '__builtin_frame_address' may be used to determine if the top of
28682     the stack has been reached.
28683
28684     Additional post-processing of the returned value may be needed, see
28685     '__builtin_extract_return_addr'.
28686
28687     This function should only be used with a nonzero argument for
28688     debugging purposes.
28689
28690 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
28691     The address as returned by '__builtin_return_address' may have to
28692     be fed through this function to get the actual encoded address.
28693     For example, on the 31-bit S/390 platform the highest bit has to be
28694     masked out, or on SPARC platforms an offset has to be added for the
28695     true next instruction to be executed.
28696
28697     If no fixup is needed, this function simply passes through ADDR.
28698
28699 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
28700     This function does the reverse of '__builtin_extract_return_addr'.
28701
28702 -- Built-in Function: void * __builtin_frame_address (unsigned int
28703          LEVEL)
28704     This function is similar to '__builtin_return_address', but it
28705     returns the address of the function frame rather than the return
28706     address of the function.  Calling '__builtin_frame_address' with a
28707     value of '0' yields the frame address of the current function, a
28708     value of '1' yields the frame address of the caller of the current
28709     function, and so forth.
28710
28711     The frame is the area on the stack that holds local variables and
28712     saved registers.  The frame address is normally the address of the
28713     first word pushed on to the stack by the function.  However, the
28714     exact definition depends upon the processor and the calling
28715     convention.  If the processor has a dedicated frame pointer
28716     register, and the function has a frame, then
28717     '__builtin_frame_address' returns the value of the frame pointer
28718     register.
28719
28720     On some machines it may be impossible to determine the frame
28721     address of any function other than the current one; in such cases,
28722     or when the top of the stack has been reached, this function
28723     returns '0' if the first frame pointer is properly initialized by
28724     the startup code.
28725
28726     This function should only be used with a nonzero argument for
28727     debugging purposes.
28728
28729
28730File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
28731
287326.49 Using Vector Instructions through Built-in Functions
28733=========================================================
28734
28735On some targets, the instruction set contains SIMD vector instructions
28736which operate on multiple values contained in one large register at the
28737same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
28738can be used this way.
28739
28740 The first step in using these extensions is to provide the necessary
28741data types.  This should be done using an appropriate 'typedef':
28742
28743     typedef int v4si __attribute__ ((vector_size (16)));
28744
28745The 'int' type specifies the base type, while the attribute specifies
28746the vector size for the variable, measured in bytes.  For example, the
28747declaration above causes the compiler to set the mode for the 'v4si'
28748type to be 16 bytes wide and divided into 'int' sized units.  For a
2874932-bit 'int' this means a vector of 4 units of 4 bytes, and the
28750corresponding mode of 'foo' is V4SI.
28751
28752 The 'vector_size' attribute is only applicable to integral and float
28753scalars, although arrays, pointers, and function return values are
28754allowed in conjunction with this construct.  Only sizes that are a power
28755of two are currently allowed.
28756
28757 All the basic integer types can be used as base types, both as signed
28758and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
28759addition, 'float' and 'double' can be used to build floating-point
28760vector types.
28761
28762 Specifying a combination that is not valid for the current architecture
28763causes GCC to synthesize the instructions using a narrower mode.  For
28764example, if you specify a variable of type 'V4SI' and your architecture
28765does not allow for this specific SIMD type, GCC produces code that uses
287664 'SIs'.
28767
28768 The types defined in this manner can be used with a subset of normal C
28769operations.  Currently, GCC allows using the following operators on
28770these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
28771
28772 The operations behave like C++ 'valarrays'.  Addition is defined as the
28773addition of the corresponding elements of the operands.  For example, in
28774the code below, each of the 4 elements in A is added to the
28775corresponding 4 elements in B and the resulting vector is stored in C.
28776
28777     typedef int v4si __attribute__ ((vector_size (16)));
28778
28779     v4si a, b, c;
28780
28781     c = a + b;
28782
28783 Subtraction, multiplication, division, and the logical operations
28784operate in a similar manner.  Likewise, the result of using the unary
28785minus or complement operators on a vector type is a vector whose
28786elements are the negative or complemented values of the corresponding
28787elements in the operand.
28788
28789 It is possible to use shifting operators '<<', '>>' on integer-type
28790vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
28791{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
28792operands must have the same number of elements.
28793
28794 For convenience, it is allowed to use a binary vector operation where
28795one operand is a scalar.  In that case the compiler transforms the
28796scalar operand into a vector where each element is the scalar from the
28797operation.  The transformation happens only if the scalar could be
28798safely converted to the vector-element type.  Consider the following
28799code.
28800
28801     typedef int v4si __attribute__ ((vector_size (16)));
28802
28803     v4si a, b, c;
28804     long l;
28805
28806     a = b + 1;    /* a = b + {1,1,1,1}; */
28807     a = 2 * b;    /* a = {2,2,2,2} * b; */
28808
28809     a = l + a;    /* Error, cannot convert long to int. */
28810
28811 Vectors can be subscripted as if the vector were an array with the same
28812number of elements and base type.  Out of bound accesses invoke
28813undefined behavior at run time.  Warnings for out of bound accesses for
28814vector subscription can be enabled with '-Warray-bounds'.
28815
28816 Vector comparison is supported with standard comparison operators: '==,
28817!=, <, <=, >, >='.  Comparison operands can be vector expressions of
28818integer-type or real-type.  Comparison between integer-type vectors and
28819real-type vectors are not supported.  The result of the comparison is a
28820vector of the same width and number of elements as the comparison
28821operands with a signed integral element type.
28822
28823 Vectors are compared element-wise producing 0 when comparison is false
28824and -1 (constant of the appropriate type where all bits are set)
28825otherwise.  Consider the following example.
28826
28827     typedef int v4si __attribute__ ((vector_size (16)));
28828
28829     v4si a = {1,2,3,4};
28830     v4si b = {3,2,1,4};
28831     v4si c;
28832
28833     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
28834     c = a == b;     /* The result would be {0,-1, 0,-1}  */
28835
28836 Vector shuffling is available using functions '__builtin_shuffle (vec,
28837mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
28838construct a permutation of elements from one or two vectors and return a
28839vector of the same type as the input vector(s).  The MASK is an integral
28840vector with the same width (W) and element count (N) as the output
28841vector.
28842
28843 The elements of the input vectors are numbered in memory ordering of
28844VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
28845considered modulo N in the single-operand case and modulo 2*N in the
28846two-operand case.
28847
28848 Consider the following example,
28849
28850     typedef int v4si __attribute__ ((vector_size (16)));
28851
28852     v4si a = {1,2,3,4};
28853     v4si b = {5,6,7,8};
28854     v4si mask1 = {0,1,1,3};
28855     v4si mask2 = {0,4,2,5};
28856     v4si res;
28857
28858     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
28859     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
28860
28861 Note that '__builtin_shuffle' is intentionally semantically compatible
28862with the OpenCL 'shuffle' and 'shuffle2' functions.
28863
28864 You can declare variables and use them in function calls and returns,
28865as well as in assignments and some casts.  You can specify a vector type
28866as a return type for a function.  Vector types can also be used as
28867function arguments.  It is possible to cast from one vector type to
28868another, provided they are of the same size (in fact, you can also cast
28869vectors to and from other datatypes of the same size).
28870
28871 You cannot operate between vectors of different lengths or different
28872signedness without a cast.
28873
28874
28875File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
28876
288776.50 Offsetof
28878=============
28879
28880GCC implements for both C and C++ a syntactic extension to implement the
28881'offsetof' macro.
28882
28883     primary:
28884             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
28885
28886     offsetof_member_designator:
28887               identifier
28888             | offsetof_member_designator "." identifier
28889             | offsetof_member_designator "[" expr "]"
28890
28891 This extension is sufficient such that
28892
28893     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
28894
28895is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
28896dependent.  In either case, MEMBER may consist of a single identifier,
28897or a sequence of member accesses and array references.
28898
28899
28900File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
28901
289026.51 Legacy __sync Built-in Functions for Atomic Memory Access
28903==============================================================
28904
28905The following built-in functions are intended to be compatible with
28906those described in the 'Intel Itanium Processor-specific Application
28907Binary Interface', section 7.4.  As such, they depart from the normal
28908GCC practice of using the '__builtin_' prefix, and further that they are
28909overloaded such that they work on multiple types.
28910
28911 The definition given in the Intel documentation allows only for the use
28912of the types 'int', 'long', 'long long' as well as their unsigned
28913counterparts.  GCC allows any integral scalar or pointer type that is 1,
289142, 4 or 8 bytes in length.
28915
28916 Not all operations are supported by all target processors.  If a
28917particular operation cannot be implemented on the target processor, a
28918warning is generated and a call an external function is generated.  The
28919external function carries the same name as the built-in version, with an
28920additional suffix '_N' where N is the size of the data type.
28921
28922 In most cases, these built-in functions are considered a "full
28923barrier".  That is, no memory operand is moved across the operation,
28924either forward or backward.  Further, instructions are issued as
28925necessary to prevent the processor from speculating loads across the
28926operation and from queuing stores after the operation.
28927
28928 All of the routines are described in the Intel documentation to take
28929"an optional list of variables protected by the memory barrier".  It's
28930not clear what is meant by that; it could mean that _only_ the following
28931variables are protected, or it could mean that these variables should in
28932addition be protected.  At present GCC ignores this list and protects
28933all variables that are globally accessible.  If in the future we make
28934some use of this list, an empty list will continue to mean all globally
28935accessible variables.
28936
28937'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
28938'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
28939'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
28940'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
28941'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
28942'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
28943     These built-in functions perform the operation suggested by the
28944     name, and returns the value that had previously been in memory.
28945     That is,
28946
28947          { tmp = *ptr; *ptr OP= value; return tmp; }
28948          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
28949
28950     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
28951     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
28952
28953'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
28954'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
28955'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
28956'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
28957'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
28958'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
28959     These built-in functions perform the operation suggested by the
28960     name, and return the new value.  That is,
28961
28962          { *ptr OP= value; return *ptr; }
28963          { *ptr = ~(*ptr & value); return *ptr; }   // nand
28964
28965     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
28966     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
28967
28968'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
28969'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
28970     These built-in functions perform an atomic compare and swap.  That
28971     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
28972     into '*PTR'.
28973
28974     The "bool" version returns true if the comparison is successful and
28975     NEWVAL is written.  The "val" version returns the contents of
28976     '*PTR' before the operation.
28977
28978'__sync_synchronize (...)'
28979     This built-in function issues a full memory barrier.
28980
28981'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
28982     This built-in function, as described by Intel, is not a traditional
28983     test-and-set operation, but rather an atomic exchange operation.
28984     It writes VALUE into '*PTR', and returns the previous contents of
28985     '*PTR'.
28986
28987     Many targets have only minimal support for such locks, and do not
28988     support a full exchange operation.  In this case, a target may
28989     support reduced functionality here by which the _only_ valid value
28990     to store is the immediate constant 1.  The exact value actually
28991     stored in '*PTR' is implementation defined.
28992
28993     This built-in function is not a full barrier, but rather an
28994     "acquire barrier".  This means that references after the operation
28995     cannot move to (or be speculated to) before the operation, but
28996     previous memory stores may not be globally visible yet, and
28997     previous memory loads may not yet be satisfied.
28998
28999'void __sync_lock_release (TYPE *ptr, ...)'
29000     This built-in function releases the lock acquired by
29001     '__sync_lock_test_and_set'.  Normally this means writing the
29002     constant 0 to '*PTR'.
29003
29004     This built-in function is not a full barrier, but rather a "release
29005     barrier".  This means that all previous memory stores are globally
29006     visible, and all previous memory loads have been satisfied, but
29007     following memory reads are not prevented from being speculated to
29008     before the barrier.
29009
29010
29011File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
29012
290136.52 Built-in functions for memory model aware atomic operations
29014================================================================
29015
29016The following built-in functions approximately match the requirements
29017for C++11 memory model.  Many are similar to the '__sync' prefixed
29018built-in functions, but all also have a memory model parameter.  These
29019are all identified by being prefixed with '__atomic', and most are
29020overloaded such that they work with multiple types.
29021
29022 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
29023bytes in length.  16-byte integral types are also allowed if '__int128'
29024(*note __int128::) is supported by the architecture.
29025
29026 Target architectures are encouraged to provide their own patterns for
29027each of these built-in functions.  If no target is provided, the
29028original non-memory model set of '__sync' atomic built-in functions are
29029utilized, along with any required synchronization fences surrounding it
29030in order to achieve the proper behavior.  Execution in this case is
29031subject to the same restrictions as those built-in functions.
29032
29033 If there is no pattern or mechanism to provide a lock free instruction
29034sequence, a call is made to an external routine with the same parameters
29035to be resolved at run time.
29036
29037 The four non-arithmetic functions (load, store, exchange, and
29038compare_exchange) all have a generic version as well.  This generic
29039version works on any data type.  If the data type size maps to one of
29040the integral sizes that may have lock free support, the generic version
29041utilizes the lock free built-in function.  Otherwise an external call is
29042left to be resolved at run time.  This external call is the same format
29043with the addition of a 'size_t' parameter inserted as the first
29044parameter indicating the size of the object being pointed to.  All
29045objects must be the same size.
29046
29047 There are 6 different memory models that can be specified.  These map
29048to the same names in the C++11 standard.  Refer there or to the GCC wiki
29049on atomic synchronization
29050(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
29051definitions.  These memory models integrate both barriers to code motion
29052as well as synchronization requirements with other threads.  These are
29053listed in approximately ascending order of strength.  It is also
29054possible to use target specific flags for memory model flags, like
29055Hardware Lock Elision.
29056
29057'__ATOMIC_RELAXED'
29058     No barriers or synchronization.
29059'__ATOMIC_CONSUME'
29060     Data dependency only for both barrier and synchronization with
29061     another thread.
29062'__ATOMIC_ACQUIRE'
29063     Barrier to hoisting of code and synchronizes with release (or
29064     stronger) semantic stores from another thread.
29065'__ATOMIC_RELEASE'
29066     Barrier to sinking of code and synchronizes with acquire (or
29067     stronger) semantic loads from another thread.
29068'__ATOMIC_ACQ_REL'
29069     Full barrier in both directions and synchronizes with acquire loads
29070     and release stores in another thread.
29071'__ATOMIC_SEQ_CST'
29072     Full barrier in both directions and synchronizes with acquire loads
29073     and release stores in all threads.
29074
29075 When implementing patterns for these built-in functions, the memory
29076model parameter can be ignored as long as the pattern implements the
29077most restrictive '__ATOMIC_SEQ_CST' model.  Any of the other memory
29078models execute correctly with this memory model but they may not execute
29079as efficiently as they could with a more appropriate implementation of
29080the relaxed requirements.
29081
29082 Note that the C++11 standard allows for the memory model parameter to
29083be determined at run time rather than at compile time.  These built-in
29084functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
29085invoke a runtime library call or inline a switch statement.  This is
29086standard compliant, safe, and the simplest approach for now.
29087
29088 The memory model parameter is a signed int, but only the lower 8 bits
29089are reserved for the memory model.  The remainder of the signed int is
29090reserved for future use and should be 0.  Use of the predefined atomic
29091values ensures proper usage.
29092
29093 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
29094     This built-in function implements an atomic load operation.  It
29095     returns the contents of '*PTR'.
29096
29097     The valid memory model variants are '__ATOMIC_RELAXED',
29098     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
29099
29100 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
29101          memmodel)
29102     This is the generic version of an atomic load.  It returns the
29103     contents of '*PTR' in '*RET'.
29104
29105 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
29106          memmodel)
29107     This built-in function implements an atomic store operation.  It
29108     writes 'VAL' into '*PTR'.
29109
29110     The valid memory model variants are '__ATOMIC_RELAXED',
29111     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
29112
29113 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
29114          memmodel)
29115     This is the generic version of an atomic store.  It stores the
29116     value of '*VAL' into '*PTR'.
29117
29118 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
29119          int memmodel)
29120     This built-in function implements an atomic exchange operation.  It
29121     writes VAL into '*PTR', and returns the previous contents of
29122     '*PTR'.
29123
29124     The valid memory model variants are '__ATOMIC_RELAXED',
29125     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
29126     '__ATOMIC_ACQ_REL'.
29127
29128 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
29129          TYPE *ret, int memmodel)
29130     This is the generic version of an atomic exchange.  It stores the
29131     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
29132     copied into '*RET'.
29133
29134 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
29135          *expected, TYPE desired, bool weak, int success_memmodel, int
29136          failure_memmodel)
29137     This built-in function implements an atomic compare and exchange
29138     operation.  This compares the contents of '*PTR' with the contents
29139     of '*EXPECTED' and if equal, writes DESIRED into '*PTR'.  If they
29140     are not equal, the current contents of '*PTR' is written into
29141     '*EXPECTED'.  WEAK is true for weak compare_exchange, and false for
29142     the strong variation.  Many targets only offer the strong variation
29143     and ignore the parameter.  When in doubt, use the strong variation.
29144
29145     True is returned if DESIRED is written into '*PTR' and the
29146     execution is considered to conform to the memory model specified by
29147     SUCCESS_MEMMODEL.  There are no restrictions on what memory model
29148     can be used here.
29149
29150     False is returned otherwise, and the execution is considered to
29151     conform to FAILURE_MEMMODEL.  This memory model cannot be
29152     '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'.  It also cannot be a
29153     stronger model than that specified by SUCCESS_MEMMODEL.
29154
29155 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
29156          *expected, TYPE *desired, bool weak, int success_memmodel, int
29157          failure_memmodel)
29158     This built-in function implements the generic version of
29159     '__atomic_compare_exchange'.  The function is virtually identical
29160     to '__atomic_compare_exchange_n', except the desired value is also
29161     a pointer.
29162
29163 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
29164          memmodel)
29165 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
29166          memmodel)
29167 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
29168          memmodel)
29169 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
29170          memmodel)
29171 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
29172          memmodel)
29173 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
29174          int memmodel)
29175     These built-in functions perform the operation suggested by the
29176     name, and return the result of the operation.  That is,
29177
29178          { *ptr OP= val; return *ptr; }
29179
29180     All memory models are valid.
29181
29182 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
29183          memmodel)
29184 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
29185          memmodel)
29186 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
29187          memmodel)
29188 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
29189          memmodel)
29190 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
29191          memmodel)
29192 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
29193          int memmodel)
29194     These built-in functions perform the operation suggested by the
29195     name, and return the value that had previously been in '*PTR'.
29196     That is,
29197
29198          { tmp = *ptr; *ptr OP= val; return tmp; }
29199
29200     All memory models are valid.
29201
29202 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
29203          memmodel)
29204
29205     This built-in function performs an atomic test-and-set operation on
29206     the byte at '*PTR'.  The byte is set to some implementation defined
29207     nonzero "set" value and the return value is 'true' if and only if
29208     the previous contents were "set".  It should be only used for
29209     operands of type 'bool' or 'char'.  For other types only part of
29210     the value may be set.
29211
29212     All memory models are valid.
29213
29214 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
29215
29216     This built-in function performs an atomic clear operation on
29217     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
29218     used for operands of type 'bool' or 'char' and in conjunction with
29219     '__atomic_test_and_set'.  For other types it may only clear
29220     partially.  If the type is not 'bool' prefer using
29221     '__atomic_store'.
29222
29223     The valid memory model variants are '__ATOMIC_RELAXED',
29224     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
29225
29226 -- Built-in Function: void __atomic_thread_fence (int memmodel)
29227
29228     This built-in function acts as a synchronization fence between
29229     threads based on the specified memory model.
29230
29231     All memory orders are valid.
29232
29233 -- Built-in Function: void __atomic_signal_fence (int memmodel)
29234
29235     This built-in function acts as a synchronization fence between a
29236     thread and signal handlers based in the same thread.
29237
29238     All memory orders are valid.
29239
29240 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
29241          *ptr)
29242
29243     This built-in function returns true if objects of SIZE bytes always
29244     generate lock free atomic instructions for the target architecture.
29245     SIZE must resolve to a compile-time constant and the result also
29246     resolves to a compile-time constant.
29247
29248     PTR is an optional pointer to the object that may be used to
29249     determine alignment.  A value of 0 indicates typical alignment
29250     should be used.  The compiler may also ignore this parameter.
29251
29252          if (_atomic_always_lock_free (sizeof (long long), 0))
29253
29254 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
29255          *ptr)
29256
29257     This built-in function returns true if objects of SIZE bytes always
29258     generate lock free atomic instructions for the target architecture.
29259     If it is not known to be lock free a call is made to a runtime
29260     routine named '__atomic_is_lock_free'.
29261
29262     PTR is an optional pointer to the object that may be used to
29263     determine alignment.  A value of 0 indicates typical alignment
29264     should be used.  The compiler may also ignore this parameter.
29265
29266
29267File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
29268
292696.53 x86 specific memory model extensions for transactional memory
29270==================================================================
29271
29272The i386 architecture supports additional memory ordering flags to mark
29273lock critical sections for hardware lock elision.  These must be
29274specified in addition to an existing memory model to atomic intrinsics.
29275
29276'__ATOMIC_HLE_ACQUIRE'
29277     Start lock elision on a lock variable.  Memory model must be
29278     '__ATOMIC_ACQUIRE' or stronger.
29279'__ATOMIC_HLE_RELEASE'
29280     End lock elision on a lock variable.  Memory model must be
29281     '__ATOMIC_RELEASE' or stronger.
29282
29283 When a lock acquire fails it is required for good performance to abort
29284the transaction quickly.  This can be done with a '_mm_pause'
29285
29286     #include <immintrin.h> // For _mm_pause
29287
29288     int lockvar;
29289
29290     /* Acquire lock with lock elision */
29291     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
29292         _mm_pause(); /* Abort failed transaction */
29293     ...
29294     /* Free lock with lock elision */
29295     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
29296
29297
29298File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
29299
293006.54 Object Size Checking Built-in Functions
29301============================================
29302
29303GCC implements a limited buffer overflow protection mechanism that can
29304prevent some buffer overflow attacks.
29305
29306 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
29307          TYPE)
29308     is a built-in construct that returns a constant number of bytes
29309     from PTR to the end of the object PTR pointer points to (if known
29310     at compile time).  '__builtin_object_size' never evaluates its
29311     arguments for side-effects.  If there are any side-effects in them,
29312     it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE
29313     2 or 3.  If there are multiple objects PTR can point to and all of
29314     them are known at compile time, the returned number is the maximum
29315     of remaining byte counts in those objects if TYPE & 2 is 0 and
29316     minimum if nonzero.  If it is not possible to determine which
29317     objects PTR points to at compile time, '__builtin_object_size'
29318     should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for
29319     TYPE 2 or 3.
29320
29321     TYPE is an integer constant from 0 to 3.  If the least significant
29322     bit is clear, objects are whole variables, if it is set, a closest
29323     surrounding subobject is considered the object a pointer points to.
29324     The second bit determines if maximum or minimum of remaining bytes
29325     is computed.
29326
29327          struct V { char buf1[10]; int b; char buf2[10]; } var;
29328          char *p = &var.buf1[1], *q = &var.b;
29329
29330          /* Here the object p points to is var.  */
29331          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
29332          /* The subobject p points to is var.buf1.  */
29333          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
29334          /* The object q points to is var.  */
29335          assert (__builtin_object_size (q, 0)
29336                  == (char *) (&var + 1) - (char *) &var.b);
29337          /* The subobject q points to is var.b.  */
29338          assert (__builtin_object_size (q, 1) == sizeof (var.b));
29339
29340 There are built-in functions added for many common string operation
29341functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
29342provided.  This built-in has an additional last argument, which is the
29343number of bytes remaining in object the DEST argument points to or
29344'(size_t) -1' if the size is not known.
29345
29346 The built-in functions are optimized into the normal string functions
29347like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
29348compile time that the destination object will not be overflown.  If the
29349compiler can determine at compile time the object will be always
29350overflown, it issues a warning.
29351
29352 The intended use can be e.g.
29353
29354     #undef memcpy
29355     #define bos0(dest) __builtin_object_size (dest, 0)
29356     #define memcpy(dest, src, n) \
29357       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
29358
29359     char *volatile p;
29360     char buf[10];
29361     /* It is unknown what object p points to, so this is optimized
29362        into plain memcpy - no checking is possible.  */
29363     memcpy (p, "abcde", n);
29364     /* Destination is known and length too.  It is known at compile
29365        time there will be no overflow.  */
29366     memcpy (&buf[5], "abcde", 5);
29367     /* Destination is known, but the length is not known at compile time.
29368        This will result in __memcpy_chk call that can check for overflow
29369        at run time.  */
29370     memcpy (&buf[5], "abcde", n);
29371     /* Destination is known and it is known at compile time there will
29372        be overflow.  There will be a warning and __memcpy_chk call that
29373        will abort the program at run time.  */
29374     memcpy (&buf[6], "abcde", 5);
29375
29376 Such built-in functions are provided for 'memcpy', 'mempcpy',
29377'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
29378'strncat'.
29379
29380 There are also checking built-in functions for formatted output
29381functions.
29382     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
29383     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29384                                   const char *fmt, ...);
29385     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
29386                                   va_list ap);
29387     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29388                                    const char *fmt, va_list ap);
29389
29390 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
29391functions and can contain implementation specific flags on what
29392additional security measures the checking function might take, such as
29393handling '%n' differently.
29394
29395 The OS argument is the object size S points to, like in the other
29396built-in functions.  There is a small difference in the behavior though,
29397if OS is '(size_t) -1', the built-in functions are optimized into the
29398non-checking functions only if FLAG is 0, otherwise the checking
29399function is called with OS argument set to '(size_t) -1'.
29400
29401 In addition to this, there are checking built-in functions
29402'__builtin___printf_chk', '__builtin___vprintf_chk',
29403'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
29404just one additional argument, FLAG, right before format string FMT.  If
29405the compiler is able to optimize them to 'fputc' etc. functions, it
29406does, otherwise the checking function is called and the FLAG argument
29407passed to it.
29408
29409
29410File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
29411
294126.55 Other Built-in Functions Provided by GCC
29413=============================================
29414
29415GCC provides a large number of built-in functions other than the ones
29416mentioned above.  Some of these are for internal use in the processing
29417of exceptions or variable-length argument lists and are not documented
29418here because they may change from time to time; we do not recommend
29419general use of these functions.
29420
29421 The remaining functions are provided for optimization purposes.
29422
29423 GCC includes built-in versions of many of the functions in the standard
29424C library.  The versions prefixed with '__builtin_' are always treated
29425as having the same meaning as the C library function even if you specify
29426the '-fno-builtin' option.  (*note C Dialect Options::) Many of these
29427functions are only optimized in certain cases; if they are not optimized
29428in a particular case, a call to the library function is emitted.
29429
29430 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
29431'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
29432'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
29433'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
29434'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
29435'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
29436'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
29437'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
29438'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
29439'signbitd64', 'signbitd128', 'significandf', 'significandl',
29440'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
29441'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii',
29442'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be
29443handled as built-in functions.  All these functions have corresponding
29444versions prefixed with '__builtin_', which may be used even in strict
29445C90 mode.
29446
29447 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
29448'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
29449'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
29450'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
29451'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
29452'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
29453'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
29454'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
29455'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
29456'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
29457'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
29458'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
29459'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
29460'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
29461'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
29462'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
29463'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
29464'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
29465'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
29466'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
29467'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
29468'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
29469'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
29470'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
29471'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
29472'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
29473handled as built-in functions except in strict ISO C90 mode ('-ansi' or
29474'-std=c90').
29475
29476 There are also built-in versions of the ISO C99 functions 'acosf',
29477'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
29478'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
29479'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
29480'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
29481'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
29482'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
29483recognized in any mode since ISO C90 reserves these names for the
29484purpose to which ISO C99 puts them.  All these functions have
29485corresponding versions prefixed with '__builtin_'.
29486
29487 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
29488'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
29489'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
29490except in strict ISO C90 mode ('-ansi' or '-std=c90').
29491
29492 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
29493'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
29494'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
29495'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
29496'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
29497'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
29498'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
29499'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
29500'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
29501'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
29502'vsprintf' are all recognized as built-in functions unless
29503'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
29504an individual function).  All of these functions have corresponding
29505versions prefixed with '__builtin_'.
29506
29507 GCC provides built-in versions of the ISO C99 floating-point comparison
29508macros that avoid raising exceptions for unordered operands.  They have
29509the same names as the standard macros ( 'isgreater', 'isgreaterequal',
29510'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
29511'__builtin_' prefixed.  We intend for a library implementor to be able
29512to simply '#define' each standard macro to its built-in equivalent.  In
29513the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign'
29514and 'isnormal' built-ins used with '__builtin_' prefixed.  The 'isinf'
29515and 'isnan' built-in functions appear both with and without the
29516'__builtin_' prefix.
29517
29518 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
29519
29520     You can use the built-in function '__builtin_types_compatible_p' to
29521     determine whether two types are the same.
29522
29523     This built-in function returns 1 if the unqualified versions of the
29524     types TYPE1 and TYPE2 (which are types, not expressions) are
29525     compatible, 0 otherwise.  The result of this built-in function can
29526     be used in integer constant expressions.
29527
29528     This built-in function ignores top level qualifiers (e.g., 'const',
29529     'volatile').  For example, 'int' is equivalent to 'const int'.
29530
29531     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
29532     'int' and 'char *' are not compatible, even if the size of their
29533     types, on the particular architecture are the same.  Also, the
29534     amount of pointer indirection is taken into account when
29535     determining similarity.  Consequently, 'short *' is not similar to
29536     'short **'.  Furthermore, two types that are typedefed are
29537     considered compatible if their underlying types are compatible.
29538
29539     An 'enum' type is not considered to be compatible with another
29540     'enum' type even if both are compatible with the same integer type;
29541     this is what the C standard specifies.  For example, 'enum {foo,
29542     bar}' is not similar to 'enum {hot, dog}'.
29543
29544     You typically use this function in code whose execution varies
29545     depending on the arguments' types.  For example:
29546
29547          #define foo(x)                                                  \
29548            ({                                                           \
29549              typeof (x) tmp = (x);                                       \
29550              if (__builtin_types_compatible_p (typeof (x), long double)) \
29551                tmp = foo_long_double (tmp);                              \
29552              else if (__builtin_types_compatible_p (typeof (x), double)) \
29553                tmp = foo_double (tmp);                                   \
29554              else if (__builtin_types_compatible_p (typeof (x), float))  \
29555                tmp = foo_float (tmp);                                    \
29556              else                                                        \
29557                abort ();                                                 \
29558              tmp;                                                        \
29559            })
29560
29561     _Note:_ This construct is only available for C.
29562
29563 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
29564          EXP2)
29565
29566     You can use the built-in function '__builtin_choose_expr' to
29567     evaluate code depending on the value of a constant expression.
29568     This built-in function returns EXP1 if CONST_EXP, which is an
29569     integer constant expression, is nonzero.  Otherwise it returns
29570     EXP2.
29571
29572     This built-in function is analogous to the '? :' operator in C,
29573     except that the expression returned has its type unaltered by
29574     promotion rules.  Also, the built-in function does not evaluate the
29575     expression that is not chosen.  For example, if CONST_EXP evaluates
29576     to true, EXP2 is not evaluated even if it has side-effects.
29577
29578     This built-in function can return an lvalue if the chosen argument
29579     is an lvalue.
29580
29581     If EXP1 is returned, the return type is the same as EXP1's type.
29582     Similarly, if EXP2 is returned, its return type is the same as
29583     EXP2.
29584
29585     Example:
29586
29587          #define foo(x)                                                    \
29588            __builtin_choose_expr (                                         \
29589              __builtin_types_compatible_p (typeof (x), double),            \
29590              foo_double (x),                                               \
29591              __builtin_choose_expr (                                       \
29592                __builtin_types_compatible_p (typeof (x), float),           \
29593                foo_float (x),                                              \
29594                /* The void expression results in a compile-time error  \
29595                   when assigning the result to something.  */          \
29596                (void)0))
29597
29598     _Note:_ This construct is only available for C.  Furthermore, the
29599     unused expression (EXP1 or EXP2 depending on the value of
29600     CONST_EXP) may still generate syntax errors.  This may change in
29601     future revisions.
29602
29603 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
29604
29605     The built-in function '__builtin_complex' is provided for use in
29606     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
29607     REAL and IMAG must have the same type, a real binary floating-point
29608     type, and the result has the corresponding complex type with real
29609     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
29610     works even when infinities, NaNs and negative zeros are involved.
29611
29612 -- Built-in Function: int __builtin_constant_p (EXP)
29613     You can use the built-in function '__builtin_constant_p' to
29614     determine if a value is known to be constant at compile time and
29615     hence that GCC can perform constant-folding on expressions
29616     involving that value.  The argument of the function is the value to
29617     test.  The function returns the integer 1 if the argument is known
29618     to be a compile-time constant and 0 if it is not known to be a
29619     compile-time constant.  A return of 0 does not indicate that the
29620     value is _not_ a constant, but merely that GCC cannot prove it is a
29621     constant with the specified value of the '-O' option.
29622
29623     You typically use this function in an embedded application where
29624     memory is a critical resource.  If you have some complex
29625     calculation, you may want it to be folded if it involves constants,
29626     but need to call a function if it does not.  For example:
29627
29628          #define Scale_Value(X)      \
29629            (__builtin_constant_p (X) \
29630            ? ((X) * SCALE + OFFSET) : Scale (X))
29631
29632     You may use this built-in function in either a macro or an inline
29633     function.  However, if you use it in an inlined function and pass
29634     an argument of the function as the argument to the built-in, GCC
29635     never returns 1 when you call the inline function with a string
29636     constant or compound literal (*note Compound Literals::) and does
29637     not return 1 when you pass a constant numeric value to the inline
29638     function unless you specify the '-O' option.
29639
29640     You may also use '__builtin_constant_p' in initializers for static
29641     data.  For instance, you can write
29642
29643          static const int table[] = {
29644             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
29645             /* ... */
29646          };
29647
29648     This is an acceptable initializer even if EXPRESSION is not a
29649     constant expression, including the case where
29650     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
29651     to a constant but EXPRESSION contains operands that are not
29652     otherwise permitted in a static initializer (for example, '0 && foo
29653     ()').  GCC must be more conservative about evaluating the built-in
29654     in this case, because it has no opportunity to perform
29655     optimization.
29656
29657     Previous versions of GCC did not accept this built-in in data
29658     initializers.  The earliest version where it is completely safe is
29659     3.0.1.
29660
29661 -- Built-in Function: long __builtin_expect (long EXP, long C)
29662     You may use '__builtin_expect' to provide the compiler with branch
29663     prediction information.  In general, you should prefer to use
29664     actual profile feedback for this ('-fprofile-arcs'), as programmers
29665     are notoriously bad at predicting how their programs actually
29666     perform.  However, there are applications in which this data is
29667     hard to collect.
29668
29669     The return value is the value of EXP, which should be an integral
29670     expression.  The semantics of the built-in are that it is expected
29671     that EXP == C.  For example:
29672
29673          if (__builtin_expect (x, 0))
29674            foo ();
29675
29676     indicates that we do not expect to call 'foo', since we expect 'x'
29677     to be zero.  Since you are limited to integral expressions for EXP,
29678     you should use constructions such as
29679
29680          if (__builtin_expect (ptr != NULL, 1))
29681            foo (*ptr);
29682
29683     when testing pointer or floating-point values.
29684
29685 -- Built-in Function: void __builtin_trap (void)
29686     This function causes the program to exit abnormally.  GCC
29687     implements this function by using a target-dependent mechanism
29688     (such as intentionally executing an illegal instruction) or by
29689     calling 'abort'.  The mechanism used may vary from release to
29690     release so you should not rely on any particular implementation.
29691
29692 -- Built-in Function: void __builtin_unreachable (void)
29693     If control flow reaches the point of the '__builtin_unreachable',
29694     the program is undefined.  It is useful in situations where the
29695     compiler cannot deduce the unreachability of the code.
29696
29697     One such case is immediately following an 'asm' statement that
29698     either never terminates, or one that transfers control elsewhere
29699     and never returns.  In this example, without the
29700     '__builtin_unreachable', GCC issues a warning that control reaches
29701     the end of a non-void function.  It also generates code to return
29702     after the 'asm'.
29703
29704          int f (int c, int v)
29705          {
29706            if (c)
29707              {
29708                return v;
29709              }
29710            else
29711              {
29712                asm("jmp error_handler");
29713                __builtin_unreachable ();
29714              }
29715          }
29716
29717     Because the 'asm' statement unconditionally transfers control out
29718     of the function, control never reaches the end of the function
29719     body.  The '__builtin_unreachable' is in fact unreachable and
29720     communicates this fact to the compiler.
29721
29722     Another use for '__builtin_unreachable' is following a call a
29723     function that never returns but that is not declared
29724     '__attribute__((noreturn))', as in this example:
29725
29726          void function_that_never_returns (void);
29727
29728          int g (int c)
29729          {
29730            if (c)
29731              {
29732                return 1;
29733              }
29734            else
29735              {
29736                function_that_never_returns ();
29737                __builtin_unreachable ();
29738              }
29739          }
29740
29741 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
29742          size_t ALIGN, ...)
29743     This function returns its first argument, and allows the compiler
29744     to assume that the returned pointer is at least ALIGN bytes
29745     aligned.  This built-in can have either two or three arguments, if
29746     it has three, the third argument should have integer type, and if
29747     it is nonzero means misalignment offset.  For example:
29748
29749          void *x = __builtin_assume_aligned (arg, 16);
29750
29751     means that the compiler can assume 'x', set to 'arg', is at least
29752     16-byte aligned, while:
29753
29754          void *x = __builtin_assume_aligned (arg, 32, 8);
29755
29756     means that the compiler can assume for 'x', set to 'arg', that
29757     '(char *) x - 8' is 32-byte aligned.
29758
29759 -- Built-in Function: int __builtin_LINE ()
29760     This function is the equivalent to the preprocessor '__LINE__'
29761     macro and returns the line number of the invocation of the
29762     built-in.
29763
29764 -- Built-in Function: int __builtin_FUNCTION ()
29765     This function is the equivalent to the preprocessor '__FUNCTION__'
29766     macro and returns the function name the invocation of the built-in
29767     is in.
29768
29769 -- Built-in Function: int __builtin_FILE ()
29770     This function is the equivalent to the preprocessor '__FILE__'
29771     macro and returns the file name the invocation of the built-in is
29772     in.
29773
29774 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
29775          *END)
29776     This function is used to flush the processor's instruction cache
29777     for the region of memory between BEGIN inclusive and END exclusive.
29778     Some targets require that the instruction cache be flushed, after
29779     modifying memory containing code, in order to obtain deterministic
29780     behavior.
29781
29782     If the target does not require instruction cache flushes,
29783     '__builtin___clear_cache' has no effect.  Otherwise either
29784     instructions are emitted in-line to clear the instruction cache or
29785     a call to the '__clear_cache' function in libgcc is made.
29786
29787 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
29788     This function is used to minimize cache-miss latency by moving data
29789     into a cache before it is accessed.  You can insert calls to
29790     '__builtin_prefetch' into code for which you know addresses of data
29791     in memory that is likely to be accessed soon.  If the target
29792     supports them, data prefetch instructions are generated.  If the
29793     prefetch is done early enough before the access then the data will
29794     be in the cache by the time it is accessed.
29795
29796     The value of ADDR is the address of the memory to prefetch.  There
29797     are two optional arguments, RW and LOCALITY.  The value of RW is a
29798     compile-time constant one or zero; one means that the prefetch is
29799     preparing for a write to the memory address and zero, the default,
29800     means that the prefetch is preparing for a read.  The value
29801     LOCALITY must be a compile-time constant integer between zero and
29802     three.  A value of zero means that the data has no temporal
29803     locality, so it need not be left in the cache after the access.  A
29804     value of three means that the data has a high degree of temporal
29805     locality and should be left in all levels of cache possible.
29806     Values of one and two mean, respectively, a low or moderate degree
29807     of temporal locality.  The default is three.
29808
29809          for (i = 0; i < n; i++)
29810            {
29811              a[i] = a[i] + b[i];
29812              __builtin_prefetch (&a[i+j], 1, 1);
29813              __builtin_prefetch (&b[i+j], 0, 1);
29814              /* ... */
29815            }
29816
29817     Data prefetch does not generate faults if ADDR is invalid, but the
29818     address expression itself must be valid.  For example, a prefetch
29819     of 'p->next' does not fault if 'p->next' is not a valid address,
29820     but evaluation faults if 'p' is not a valid address.
29821
29822     If the target does not support data prefetch, the address
29823     expression is evaluated if it includes side effects but no other
29824     code is generated and GCC does not issue a warning.
29825
29826 -- Built-in Function: double __builtin_huge_val (void)
29827     Returns a positive infinity, if supported by the floating-point
29828     format, else 'DBL_MAX'.  This function is suitable for implementing
29829     the ISO C macro 'HUGE_VAL'.
29830
29831 -- Built-in Function: float __builtin_huge_valf (void)
29832     Similar to '__builtin_huge_val', except the return type is 'float'.
29833
29834 -- Built-in Function: long double __builtin_huge_vall (void)
29835     Similar to '__builtin_huge_val', except the return type is 'long
29836     double'.
29837
29838 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
29839          int, ...)
29840     This built-in implements the C99 fpclassify functionality.  The
29841     first five int arguments should be the target library's notion of
29842     the possible FP classes and are used for return values.  They must
29843     be constant values and they must appear in this order: 'FP_NAN',
29844     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
29845     ellipsis is for exactly one floating-point value to classify.  GCC
29846     treats the last argument as type-generic, which means it does not
29847     do default promotion from float to double.
29848
29849 -- Built-in Function: double __builtin_inf (void)
29850     Similar to '__builtin_huge_val', except a warning is generated if
29851     the target floating-point format does not support infinities.
29852
29853 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
29854     Similar to '__builtin_inf', except the return type is '_Decimal32'.
29855
29856 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
29857     Similar to '__builtin_inf', except the return type is '_Decimal64'.
29858
29859 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
29860     Similar to '__builtin_inf', except the return type is
29861     '_Decimal128'.
29862
29863 -- Built-in Function: float __builtin_inff (void)
29864     Similar to '__builtin_inf', except the return type is 'float'.
29865     This function is suitable for implementing the ISO C99 macro
29866     'INFINITY'.
29867
29868 -- Built-in Function: long double __builtin_infl (void)
29869     Similar to '__builtin_inf', except the return type is 'long
29870     double'.
29871
29872 -- Built-in Function: int __builtin_isinf_sign (...)
29873     Similar to 'isinf', except the return value is negative for an
29874     argument of '-Inf'.  Note while the parameter list is an ellipsis,
29875     this function only accepts exactly one floating-point argument.
29876     GCC treats this parameter as type-generic, which means it does not
29877     do default promotion from float to double.
29878
29879 -- Built-in Function: double __builtin_nan (const char *str)
29880     This is an implementation of the ISO C99 function 'nan'.
29881
29882     Since ISO C99 defines this function in terms of 'strtod', which we
29883     do not implement, a description of the parsing is in order.  The
29884     string is parsed as by 'strtol'; that is, the base is recognized by
29885     leading '0' or '0x' prefixes.  The number parsed is placed in the
29886     significand such that the least significant bit of the number is at
29887     the least significant bit of the significand.  The number is
29888     truncated to fit the significand field provided.  The significand
29889     is forced to be a quiet NaN.
29890
29891     This function, if given a string literal all of which would have
29892     been consumed by 'strtol', is evaluated early enough that it is
29893     considered a compile-time constant.
29894
29895 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
29896     Similar to '__builtin_nan', except the return type is '_Decimal32'.
29897
29898 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
29899     Similar to '__builtin_nan', except the return type is '_Decimal64'.
29900
29901 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
29902     Similar to '__builtin_nan', except the return type is
29903     '_Decimal128'.
29904
29905 -- Built-in Function: float __builtin_nanf (const char *str)
29906     Similar to '__builtin_nan', except the return type is 'float'.
29907
29908 -- Built-in Function: long double __builtin_nanl (const char *str)
29909     Similar to '__builtin_nan', except the return type is 'long
29910     double'.
29911
29912 -- Built-in Function: double __builtin_nans (const char *str)
29913     Similar to '__builtin_nan', except the significand is forced to be
29914     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
29915
29916 -- Built-in Function: float __builtin_nansf (const char *str)
29917     Similar to '__builtin_nans', except the return type is 'float'.
29918
29919 -- Built-in Function: long double __builtin_nansl (const char *str)
29920     Similar to '__builtin_nans', except the return type is 'long
29921     double'.
29922
29923 -- Built-in Function: int __builtin_ffs (unsigned int x)
29924     Returns one plus the index of the least significant 1-bit of X, or
29925     if X is zero, returns zero.
29926
29927 -- Built-in Function: int __builtin_clz (unsigned int x)
29928     Returns the number of leading 0-bits in X, starting at the most
29929     significant bit position.  If X is 0, the result is undefined.
29930
29931 -- Built-in Function: int __builtin_ctz (unsigned int x)
29932     Returns the number of trailing 0-bits in X, starting at the least
29933     significant bit position.  If X is 0, the result is undefined.
29934
29935 -- Built-in Function: int __builtin_clrsb (int x)
29936     Returns the number of leading redundant sign bits in X, i.e. the
29937     number of bits following the most significant bit that are
29938     identical to it.  There are no special cases for 0 or other values.
29939
29940 -- Built-in Function: int __builtin_popcount (unsigned int x)
29941     Returns the number of 1-bits in X.
29942
29943 -- Built-in Function: int __builtin_parity (unsigned int x)
29944     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
29945
29946 -- Built-in Function: int __builtin_ffsl (unsigned long)
29947     Similar to '__builtin_ffs', except the argument type is 'unsigned
29948     long'.
29949
29950 -- Built-in Function: int __builtin_clzl (unsigned long)
29951     Similar to '__builtin_clz', except the argument type is 'unsigned
29952     long'.
29953
29954 -- Built-in Function: int __builtin_ctzl (unsigned long)
29955     Similar to '__builtin_ctz', except the argument type is 'unsigned
29956     long'.
29957
29958 -- Built-in Function: int __builtin_clrsbl (long)
29959     Similar to '__builtin_clrsb', except the argument type is 'long'.
29960
29961 -- Built-in Function: int __builtin_popcountl (unsigned long)
29962     Similar to '__builtin_popcount', except the argument type is
29963     'unsigned long'.
29964
29965 -- Built-in Function: int __builtin_parityl (unsigned long)
29966     Similar to '__builtin_parity', except the argument type is
29967     'unsigned long'.
29968
29969 -- Built-in Function: int __builtin_ffsll (unsigned long long)
29970     Similar to '__builtin_ffs', except the argument type is 'unsigned
29971     long long'.
29972
29973 -- Built-in Function: int __builtin_clzll (unsigned long long)
29974     Similar to '__builtin_clz', except the argument type is 'unsigned
29975     long long'.
29976
29977 -- Built-in Function: int __builtin_ctzll (unsigned long long)
29978     Similar to '__builtin_ctz', except the argument type is 'unsigned
29979     long long'.
29980
29981 -- Built-in Function: int __builtin_clrsbll (long long)
29982     Similar to '__builtin_clrsb', except the argument type is 'long
29983     long'.
29984
29985 -- Built-in Function: int __builtin_popcountll (unsigned long long)
29986     Similar to '__builtin_popcount', except the argument type is
29987     'unsigned long long'.
29988
29989 -- Built-in Function: int __builtin_parityll (unsigned long long)
29990     Similar to '__builtin_parity', except the argument type is
29991     'unsigned long long'.
29992
29993 -- Built-in Function: double __builtin_powi (double, int)
29994     Returns the first argument raised to the power of the second.
29995     Unlike the 'pow' function no guarantees about precision and
29996     rounding are made.
29997
29998 -- Built-in Function: float __builtin_powif (float, int)
29999     Similar to '__builtin_powi', except the argument and return types
30000     are 'float'.
30001
30002 -- Built-in Function: long double __builtin_powil (long double, int)
30003     Similar to '__builtin_powi', except the argument and return types
30004     are 'long double'.
30005
30006 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
30007     Returns X with the order of the bytes reversed; for example,
30008     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
30009
30010 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
30011     Similar to '__builtin_bswap16', except the argument and return
30012     types are 32 bit.
30013
30014 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
30015     Similar to '__builtin_bswap32', except the argument and return
30016     types are 64 bit.
30017
30018
30019File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
30020
300216.56 Built-in Functions Specific to Particular Target Machines
30022==============================================================
30023
30024On some target machines, GCC supports many built-in functions specific
30025to those machines.  Generally these generate calls to specific machine
30026instructions, but allow the compiler to schedule those calls.
30027
30028* Menu:
30029
30030* Alpha Built-in Functions::
30031* ARM iWMMXt Built-in Functions::
30032* ARM NEON Intrinsics::
30033* AVR Built-in Functions::
30034* Blackfin Built-in Functions::
30035* FR-V Built-in Functions::
30036* X86 Built-in Functions::
30037* X86 transactional memory intrinsics::
30038* MIPS DSP Built-in Functions::
30039* MIPS Paired-Single Support::
30040* MIPS Loongson Built-in Functions::
30041* Other MIPS Built-in Functions::
30042* picoChip Built-in Functions::
30043* PowerPC Built-in Functions::
30044* PowerPC AltiVec/VSX Built-in Functions::
30045* PowerPC Hardware Transactional Memory Built-in Functions::
30046* RX Built-in Functions::
30047* S/390 System z Built-in Functions::
30048* SH Built-in Functions::
30049* SPARC VIS Built-in Functions::
30050* SPU Built-in Functions::
30051* TI C6X Built-in Functions::
30052* TILE-Gx Built-in Functions::
30053* TILEPro Built-in Functions::
30054
30055
30056File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30057
300586.56.1 Alpha Built-in Functions
30059-------------------------------
30060
30061These built-in functions are available for the Alpha family of
30062processors, depending on the command-line switches used.
30063
30064 The following built-in functions are always available.  They all
30065generate the machine instruction that is part of the name.
30066
30067     long __builtin_alpha_implver (void)
30068     long __builtin_alpha_rpcc (void)
30069     long __builtin_alpha_amask (long)
30070     long __builtin_alpha_cmpbge (long, long)
30071     long __builtin_alpha_extbl (long, long)
30072     long __builtin_alpha_extwl (long, long)
30073     long __builtin_alpha_extll (long, long)
30074     long __builtin_alpha_extql (long, long)
30075     long __builtin_alpha_extwh (long, long)
30076     long __builtin_alpha_extlh (long, long)
30077     long __builtin_alpha_extqh (long, long)
30078     long __builtin_alpha_insbl (long, long)
30079     long __builtin_alpha_inswl (long, long)
30080     long __builtin_alpha_insll (long, long)
30081     long __builtin_alpha_insql (long, long)
30082     long __builtin_alpha_inswh (long, long)
30083     long __builtin_alpha_inslh (long, long)
30084     long __builtin_alpha_insqh (long, long)
30085     long __builtin_alpha_mskbl (long, long)
30086     long __builtin_alpha_mskwl (long, long)
30087     long __builtin_alpha_mskll (long, long)
30088     long __builtin_alpha_mskql (long, long)
30089     long __builtin_alpha_mskwh (long, long)
30090     long __builtin_alpha_msklh (long, long)
30091     long __builtin_alpha_mskqh (long, long)
30092     long __builtin_alpha_umulh (long, long)
30093     long __builtin_alpha_zap (long, long)
30094     long __builtin_alpha_zapnot (long, long)
30095
30096 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
30097where CPU is 'pca56' or later.  They all generate the machine
30098instruction that is part of the name.
30099
30100     long __builtin_alpha_pklb (long)
30101     long __builtin_alpha_pkwb (long)
30102     long __builtin_alpha_unpkbl (long)
30103     long __builtin_alpha_unpkbw (long)
30104     long __builtin_alpha_minub8 (long, long)
30105     long __builtin_alpha_minsb8 (long, long)
30106     long __builtin_alpha_minuw4 (long, long)
30107     long __builtin_alpha_minsw4 (long, long)
30108     long __builtin_alpha_maxub8 (long, long)
30109     long __builtin_alpha_maxsb8 (long, long)
30110     long __builtin_alpha_maxuw4 (long, long)
30111     long __builtin_alpha_maxsw4 (long, long)
30112     long __builtin_alpha_perr (long, long)
30113
30114 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
30115where CPU is 'ev67' or later.  They all generate the machine instruction
30116that is part of the name.
30117
30118     long __builtin_alpha_cttz (long)
30119     long __builtin_alpha_ctlz (long)
30120     long __builtin_alpha_ctpop (long)
30121
30122 The following built-in functions are available on systems that use the
30123OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
30124calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
30125'wrval'.
30126
30127     void *__builtin_thread_pointer (void)
30128     void __builtin_set_thread_pointer (void *)
30129
30130
30131File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
30132
301336.56.2 ARM iWMMXt Built-in Functions
30134------------------------------------
30135
30136These built-in functions are available for the ARM family of processors
30137when the '-mcpu=iwmmxt' switch is used:
30138
30139     typedef int v2si __attribute__ ((vector_size (8)));
30140     typedef short v4hi __attribute__ ((vector_size (8)));
30141     typedef char v8qi __attribute__ ((vector_size (8)));
30142
30143     int __builtin_arm_getwcgr0 (void)
30144     void __builtin_arm_setwcgr0 (int)
30145     int __builtin_arm_getwcgr1 (void)
30146     void __builtin_arm_setwcgr1 (int)
30147     int __builtin_arm_getwcgr2 (void)
30148     void __builtin_arm_setwcgr2 (int)
30149     int __builtin_arm_getwcgr3 (void)
30150     void __builtin_arm_setwcgr3 (int)
30151     int __builtin_arm_textrmsb (v8qi, int)
30152     int __builtin_arm_textrmsh (v4hi, int)
30153     int __builtin_arm_textrmsw (v2si, int)
30154     int __builtin_arm_textrmub (v8qi, int)
30155     int __builtin_arm_textrmuh (v4hi, int)
30156     int __builtin_arm_textrmuw (v2si, int)
30157     v8qi __builtin_arm_tinsrb (v8qi, int, int)
30158     v4hi __builtin_arm_tinsrh (v4hi, int, int)
30159     v2si __builtin_arm_tinsrw (v2si, int, int)
30160     long long __builtin_arm_tmia (long long, int, int)
30161     long long __builtin_arm_tmiabb (long long, int, int)
30162     long long __builtin_arm_tmiabt (long long, int, int)
30163     long long __builtin_arm_tmiaph (long long, int, int)
30164     long long __builtin_arm_tmiatb (long long, int, int)
30165     long long __builtin_arm_tmiatt (long long, int, int)
30166     int __builtin_arm_tmovmskb (v8qi)
30167     int __builtin_arm_tmovmskh (v4hi)
30168     int __builtin_arm_tmovmskw (v2si)
30169     long long __builtin_arm_waccb (v8qi)
30170     long long __builtin_arm_wacch (v4hi)
30171     long long __builtin_arm_waccw (v2si)
30172     v8qi __builtin_arm_waddb (v8qi, v8qi)
30173     v8qi __builtin_arm_waddbss (v8qi, v8qi)
30174     v8qi __builtin_arm_waddbus (v8qi, v8qi)
30175     v4hi __builtin_arm_waddh (v4hi, v4hi)
30176     v4hi __builtin_arm_waddhss (v4hi, v4hi)
30177     v4hi __builtin_arm_waddhus (v4hi, v4hi)
30178     v2si __builtin_arm_waddw (v2si, v2si)
30179     v2si __builtin_arm_waddwss (v2si, v2si)
30180     v2si __builtin_arm_waddwus (v2si, v2si)
30181     v8qi __builtin_arm_walign (v8qi, v8qi, int)
30182     long long __builtin_arm_wand(long long, long long)
30183     long long __builtin_arm_wandn (long long, long long)
30184     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
30185     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
30186     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
30187     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
30188     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
30189     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
30190     v2si __builtin_arm_wcmpeqw (v2si, v2si)
30191     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
30192     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
30193     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
30194     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
30195     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
30196     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
30197     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
30198     long long __builtin_arm_wmacsz (v4hi, v4hi)
30199     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
30200     long long __builtin_arm_wmacuz (v4hi, v4hi)
30201     v4hi __builtin_arm_wmadds (v4hi, v4hi)
30202     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
30203     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
30204     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
30205     v2si __builtin_arm_wmaxsw (v2si, v2si)
30206     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
30207     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
30208     v2si __builtin_arm_wmaxuw (v2si, v2si)
30209     v8qi __builtin_arm_wminsb (v8qi, v8qi)
30210     v4hi __builtin_arm_wminsh (v4hi, v4hi)
30211     v2si __builtin_arm_wminsw (v2si, v2si)
30212     v8qi __builtin_arm_wminub (v8qi, v8qi)
30213     v4hi __builtin_arm_wminuh (v4hi, v4hi)
30214     v2si __builtin_arm_wminuw (v2si, v2si)
30215     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
30216     v4hi __builtin_arm_wmulul (v4hi, v4hi)
30217     v4hi __builtin_arm_wmulum (v4hi, v4hi)
30218     long long __builtin_arm_wor (long long, long long)
30219     v2si __builtin_arm_wpackdss (long long, long long)
30220     v2si __builtin_arm_wpackdus (long long, long long)
30221     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
30222     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
30223     v4hi __builtin_arm_wpackwss (v2si, v2si)
30224     v4hi __builtin_arm_wpackwus (v2si, v2si)
30225     long long __builtin_arm_wrord (long long, long long)
30226     long long __builtin_arm_wrordi (long long, int)
30227     v4hi __builtin_arm_wrorh (v4hi, long long)
30228     v4hi __builtin_arm_wrorhi (v4hi, int)
30229     v2si __builtin_arm_wrorw (v2si, long long)
30230     v2si __builtin_arm_wrorwi (v2si, int)
30231     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
30232     v2si __builtin_arm_wsadbz (v8qi, v8qi)
30233     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
30234     v2si __builtin_arm_wsadhz (v4hi, v4hi)
30235     v4hi __builtin_arm_wshufh (v4hi, int)
30236     long long __builtin_arm_wslld (long long, long long)
30237     long long __builtin_arm_wslldi (long long, int)
30238     v4hi __builtin_arm_wsllh (v4hi, long long)
30239     v4hi __builtin_arm_wsllhi (v4hi, int)
30240     v2si __builtin_arm_wsllw (v2si, long long)
30241     v2si __builtin_arm_wsllwi (v2si, int)
30242     long long __builtin_arm_wsrad (long long, long long)
30243     long long __builtin_arm_wsradi (long long, int)
30244     v4hi __builtin_arm_wsrah (v4hi, long long)
30245     v4hi __builtin_arm_wsrahi (v4hi, int)
30246     v2si __builtin_arm_wsraw (v2si, long long)
30247     v2si __builtin_arm_wsrawi (v2si, int)
30248     long long __builtin_arm_wsrld (long long, long long)
30249     long long __builtin_arm_wsrldi (long long, int)
30250     v4hi __builtin_arm_wsrlh (v4hi, long long)
30251     v4hi __builtin_arm_wsrlhi (v4hi, int)
30252     v2si __builtin_arm_wsrlw (v2si, long long)
30253     v2si __builtin_arm_wsrlwi (v2si, int)
30254     v8qi __builtin_arm_wsubb (v8qi, v8qi)
30255     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
30256     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
30257     v4hi __builtin_arm_wsubh (v4hi, v4hi)
30258     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
30259     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
30260     v2si __builtin_arm_wsubw (v2si, v2si)
30261     v2si __builtin_arm_wsubwss (v2si, v2si)
30262     v2si __builtin_arm_wsubwus (v2si, v2si)
30263     v4hi __builtin_arm_wunpckehsb (v8qi)
30264     v2si __builtin_arm_wunpckehsh (v4hi)
30265     long long __builtin_arm_wunpckehsw (v2si)
30266     v4hi __builtin_arm_wunpckehub (v8qi)
30267     v2si __builtin_arm_wunpckehuh (v4hi)
30268     long long __builtin_arm_wunpckehuw (v2si)
30269     v4hi __builtin_arm_wunpckelsb (v8qi)
30270     v2si __builtin_arm_wunpckelsh (v4hi)
30271     long long __builtin_arm_wunpckelsw (v2si)
30272     v4hi __builtin_arm_wunpckelub (v8qi)
30273     v2si __builtin_arm_wunpckeluh (v4hi)
30274     long long __builtin_arm_wunpckeluw (v2si)
30275     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
30276     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
30277     v2si __builtin_arm_wunpckihw (v2si, v2si)
30278     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
30279     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
30280     v2si __builtin_arm_wunpckilw (v2si, v2si)
30281     long long __builtin_arm_wxor (long long, long long)
30282     long long __builtin_arm_wzero ()
30283
30284
30285File: gcc.info,  Node: ARM NEON Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30286
302876.56.3 ARM NEON Intrinsics
30288--------------------------
30289
30290These built-in intrinsics for the ARM Advanced SIMD extension are
30291available when the '-mfpu=neon' switch is used:
30292
302936.56.3.1 Addition
30294.................
30295
30296   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
30297     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
30298
30299   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
30300     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
30301
30302   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
30303     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
30304
30305   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
30306     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
30307
30308   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
30309     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
30310
30311   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
30312     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
30313
30314   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
30315     _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0'
30316
30317   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
30318
30319   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
30320
30321   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
30322     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
30323
30324   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
30325     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
30326
30327   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
30328     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
30329
30330   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
30331     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
30332
30333   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
30334     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
30335
30336   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
30337     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
30338
30339   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
30340     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
30341
30342   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
30343     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
30344
30345   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
30346     _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0'
30347
30348   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
30349     _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0'
30350
30351   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
30352     _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0'
30353
30354   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
30355     _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0'
30356
30357   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
30358     _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0'
30359
30360   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
30361     _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0'
30362
30363   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
30364     _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0'
30365
30366   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
30367     _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0'
30368
30369   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
30370     _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0'
30371
30372   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
30373     _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0'
30374
30375   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
30376     _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0'
30377
30378   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
30379     _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0'
30380
30381   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
30382     _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0'
30383
30384   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
30385     _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0'
30386
30387   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
30388     _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0'
30389
30390   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
30391     _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0'
30392
30393   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
30394     _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0'
30395
30396   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
30397     _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0'
30398
30399   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
30400     _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0'
30401
30402   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
30403     _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0'
30404
30405   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
30406     _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0'
30407
30408   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
30409     _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0'
30410
30411   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
30412     _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0'
30413
30414   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
30415     _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0'
30416
30417   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
30418     _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0'
30419
30420   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
30421     _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0'
30422
30423   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
30424     _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0'
30425
30426   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
30427     _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0'
30428
30429   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
30430     _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0'
30431
30432   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
30433     _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0'
30434
30435   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
30436     _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0'
30437
30438   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
30439     _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0'
30440
30441   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
30442     _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0'
30443
30444   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
30445     _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0'
30446
30447   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
30448     _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0'
30449
30450   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
30451     _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0'
30452
30453   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
30454     _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0'
30455
30456   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
30457     _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0'
30458
30459   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
30460     _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0'
30461
30462   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
30463     _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0'
30464
30465   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
30466     _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0'
30467
30468   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
30469     _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0'
30470
30471   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
30472     _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0'
30473
30474   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
30475     _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0'
30476
30477   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
30478     _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0'
30479
30480   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
30481     _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0'
30482
30483   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
30484     _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0'
30485
30486   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
30487     _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0'
30488
30489   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
30490     _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0'
30491
30492   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
30493     _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0'
30494
30495   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
30496     _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0'
30497
30498   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
30499     _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0'
30500
30501   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
30502     _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0'
30503
30504   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
30505     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
30506
30507   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
30508     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
30509
30510   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
30511     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
30512
30513   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
30514     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
30515
30516   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
30517     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
30518
30519   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
30520     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
30521
30522   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
30523     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
30524
30525   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
30526     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
30527
30528   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
30529     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
30530
30531   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
30532     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
30533
30534   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
30535     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
30536
30537   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
30538     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
30539
305406.56.3.2 Multiplication
30541.......................
30542
30543   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
30544     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
30545
30546   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
30547     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
30548
30549   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
30550     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
30551
30552   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
30553     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
30554
30555   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
30556     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
30557
30558   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
30559     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
30560
30561   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
30562     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0'
30563
30564   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
30565     _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0'
30566
30567   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
30568     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
30569
30570   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
30571     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
30572
30573   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
30574     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
30575
30576   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
30577     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
30578
30579   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
30580     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
30581
30582   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
30583     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
30584
30585   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
30586     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0'
30587
30588   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
30589     _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0'
30590
30591   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
30592     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0'
30593
30594   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
30595     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0'
30596
30597   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
30598     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0'
30599
30600   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
30601     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0'
30602
30603   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
30604     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0'
30605
30606   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
30607     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0'
30608
30609   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
30610     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0'
30611
30612   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
30613     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0'
30614
30615   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
30616     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0'
30617
30618   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
30619     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0'
30620
30621   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
30622     _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0'
30623
30624   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
30625     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0'
30626
30627   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
30628     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0'
30629
30630   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
30631     _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0'
30632
30633   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
30634     _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0'
30635
30636   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
30637     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0'
30638
30639   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
30640     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0'
30641
306426.56.3.3 Multiply-accumulate
30643............................
30644
30645   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30646     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
30647
30648   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30649     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
30650
30651   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30652     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
30653
30654   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
30655     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
30656
30657   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
30658     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
30659
30660   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
30661     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
30662
30663   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
30664     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0'
30665
30666   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30667     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
30668
30669   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30670     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
30671
30672   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30673     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
30674
30675   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
30676     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
30677
30678   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
30679     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
30680
30681   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
30682     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
30683
30684   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30685     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0'
30686
30687   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30688     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0'
30689
30690   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30691     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0'
30692
30693   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30694     _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0'
30695
30696   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30697     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0'
30698
30699   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30700     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0'
30701
30702   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
30703     _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0'
30704
30705   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30706     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0'
30707
30708   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30709     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0'
30710
307116.56.3.4 Multiply-subtract
30712..........................
30713
30714   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30715     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
30716
30717   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30718     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
30719
30720   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30721     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
30722
30723   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
30724     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
30725
30726   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
30727     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
30728
30729   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
30730     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
30731
30732   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
30733     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0'
30734
30735   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30736     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
30737
30738   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30739     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
30740
30741   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30742     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
30743
30744   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
30745     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
30746
30747   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
30748     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
30749
30750   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
30751     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
30752
30753   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30754     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0'
30755
30756   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30757     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0'
30758
30759   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30760     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0'
30761
30762   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30763     _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0'
30764
30765   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30766     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0'
30767
30768   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30769     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0'
30770
30771   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
30772     _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0'
30773
30774   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30775     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0'
30776
30777   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30778     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0'
30779
307806.56.3.5 Fused-multiply-accumulate
30781..................................
30782
30783   * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
30784     _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0'
30785
30786   * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30787     _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0'
30788
307896.56.3.6 Fused-multiply-subtract
30790................................
30791
30792   * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
30793     _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0'
30794
30795   * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30796     _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0'
30797
307986.56.3.7 Round to integral (to nearest, ties to even)
30799.....................................................
30800
30801   * float32x2_t vrndn_f32 (float32x2_t)
30802     _Form of expected instruction(s):_ 'vrintn.f32 D0, D0'
30803
30804   * float32x4_t vrndqn_f32 (float32x4_t)
30805     _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0'
30806
308076.56.3.8 Round to integral (to nearest, ties away from zero)
30808............................................................
30809
30810   * float32x2_t vrnda_f32 (float32x2_t)
30811     _Form of expected instruction(s):_ 'vrinta.f32 D0, D0'
30812
30813   * float32x4_t vrndqa_f32 (float32x4_t)
30814     _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0'
30815
308166.56.3.9 Round to integral (towards +Inf)
30817.........................................
30818
30819   * float32x2_t vrndp_f32 (float32x2_t)
30820     _Form of expected instruction(s):_ 'vrintp.f32 D0, D0'
30821
30822   * float32x4_t vrndqp_f32 (float32x4_t)
30823     _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0'
30824
308256.56.3.10 Round to integral (towards -Inf)
30826..........................................
30827
30828   * float32x2_t vrndm_f32 (float32x2_t)
30829     _Form of expected instruction(s):_ 'vrintm.f32 D0, D0'
30830
30831   * float32x4_t vrndqm_f32 (float32x4_t)
30832     _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0'
30833
308346.56.3.11 Round to integral (towards 0)
30835.......................................
30836
30837   * float32x2_t vrnd_f32 (float32x2_t)
30838     _Form of expected instruction(s):_ 'vrintz.f32 D0, D0'
30839
30840   * float32x4_t vrndq_f32 (float32x4_t)
30841     _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0'
30842
308436.56.3.12 Subtraction
30844.....................
30845
30846   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
30847     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
30848
30849   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
30850     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
30851
30852   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
30853     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
30854
30855   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
30856     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
30857
30858   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
30859     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
30860
30861   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
30862     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
30863
30864   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
30865     _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0'
30866
30867   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
30868
30869   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
30870
30871   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
30872     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
30873
30874   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
30875     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
30876
30877   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
30878     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
30879
30880   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
30881     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
30882
30883   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
30884     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
30885
30886   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
30887     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
30888
30889   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
30890     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
30891
30892   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
30893     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
30894
30895   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
30896     _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0'
30897
30898   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
30899     _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0'
30900
30901   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
30902     _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0'
30903
30904   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
30905     _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0'
30906
30907   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
30908     _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0'
30909
30910   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
30911     _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0'
30912
30913   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
30914     _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0'
30915
30916   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
30917     _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0'
30918
30919   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
30920     _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0'
30921
30922   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
30923     _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0'
30924
30925   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
30926     _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0'
30927
30928   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
30929     _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0'
30930
30931   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
30932     _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0'
30933
30934   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
30935     _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0'
30936
30937   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
30938     _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0'
30939
30940   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
30941     _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0'
30942
30943   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
30944     _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0'
30945
30946   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
30947     _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0'
30948
30949   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
30950     _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0'
30951
30952   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
30953     _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0'
30954
30955   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
30956     _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0'
30957
30958   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
30959     _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0'
30960
30961   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
30962     _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0'
30963
30964   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
30965     _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0'
30966
30967   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
30968     _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0'
30969
30970   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
30971     _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0'
30972
30973   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
30974     _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0'
30975
30976   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
30977     _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0'
30978
30979   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
30980     _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0'
30981
30982   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
30983     _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0'
30984
30985   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
30986     _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0'
30987
30988   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
30989     _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0'
30990
30991   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
30992     _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0'
30993
30994   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
30995     _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0'
30996
30997   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
30998     _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0'
30999
31000   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
31001     _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0'
31002
31003   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
31004     _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0'
31005
31006   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
31007     _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0'
31008
31009   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
31010     _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0'
31011
31012   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
31013     _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0'
31014
31015   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
31016     _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0'
31017
31018   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
31019     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
31020
31021   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
31022     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
31023
31024   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
31025     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
31026
31027   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
31028     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
31029
31030   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
31031     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
31032
31033   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
31034     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
31035
31036   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
31037     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
31038
31039   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
31040     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
31041
31042   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
31043     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
31044
31045   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
31046     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
31047
31048   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
31049     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
31050
31051   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
31052     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
31053
310546.56.3.13 Comparison (equal-to)
31055...............................
31056
31057   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
31058     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
31059
31060   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
31061     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
31062
31063   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
31064     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
31065
31066   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
31067     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
31068
31069   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
31070     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
31071
31072   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
31073     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
31074
31075   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
31076     _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0'
31077
31078   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
31079     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
31080
31081   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
31082     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
31083
31084   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
31085     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
31086
31087   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
31088     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
31089
31090   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
31091     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
31092
31093   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
31094     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
31095
31096   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
31097     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
31098
31099   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
31100     _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0'
31101
31102   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
31103     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
31104
311056.56.3.14 Comparison (greater-than-or-equal-to)
31106...............................................
31107
31108   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
31109     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
31110
31111   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
31112     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
31113
31114   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
31115     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
31116
31117   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
31118     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
31119
31120   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
31121     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
31122
31123   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
31124     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
31125
31126   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
31127     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
31128
31129   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
31130     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
31131
31132   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
31133     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
31134
31135   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
31136     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
31137
31138   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
31139     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
31140
31141   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
31142     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
31143
31144   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
31145     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
31146
31147   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
31148     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
31149
311506.56.3.15 Comparison (less-than-or-equal-to)
31151............................................
31152
31153   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
31154     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
31155
31156   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
31157     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
31158
31159   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
31160     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
31161
31162   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
31163     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
31164
31165   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
31166     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
31167
31168   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
31169     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
31170
31171   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
31172     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
31173
31174   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
31175     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
31176
31177   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
31178     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
31179
31180   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
31181     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
31182
31183   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
31184     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
31185
31186   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
31187     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
31188
31189   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
31190     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
31191
31192   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
31193     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
31194
311956.56.3.16 Comparison (greater-than)
31196...................................
31197
31198   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
31199     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
31200
31201   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
31202     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
31203
31204   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
31205     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
31206
31207   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
31208     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
31209
31210   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
31211     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
31212
31213   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
31214     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
31215
31216   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
31217     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
31218
31219   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
31220     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
31221
31222   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
31223     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
31224
31225   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
31226     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
31227
31228   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
31229     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
31230
31231   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
31232     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
31233
31234   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
31235     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
31236
31237   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
31238     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
31239
312406.56.3.17 Comparison (less-than)
31241................................
31242
31243   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
31244     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
31245
31246   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
31247     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
31248
31249   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
31250     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
31251
31252   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
31253     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
31254
31255   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
31256     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
31257
31258   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
31259     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
31260
31261   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
31262     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
31263
31264   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
31265     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
31266
31267   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
31268     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
31269
31270   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
31271     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
31272
31273   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
31274     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
31275
31276   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
31277     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
31278
31279   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
31280     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
31281
31282   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
31283     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
31284
312856.56.3.18 Comparison (absolute greater-than-or-equal-to)
31286........................................................
31287
31288   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
31289     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
31290
31291   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
31292     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
31293
312946.56.3.19 Comparison (absolute less-than-or-equal-to)
31295.....................................................
31296
31297   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
31298     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
31299
31300   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
31301     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
31302
313036.56.3.20 Comparison (absolute greater-than)
31304............................................
31305
31306   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
31307     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
31308
31309   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
31310     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
31311
313126.56.3.21 Comparison (absolute less-than)
31313.........................................
31314
31315   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
31316     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
31317
31318   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
31319     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
31320
313216.56.3.22 Test bits
31322...................
31323
31324   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
31325     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
31326
31327   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
31328     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
31329
31330   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
31331     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
31332
31333   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
31334     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
31335
31336   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
31337     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
31338
31339   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
31340     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
31341
31342   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
31343     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
31344
31345   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
31346     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
31347
31348   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
31349     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
31350
31351   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
31352     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
31353
31354   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
31355     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
31356
31357   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
31358     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
31359
31360   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
31361     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
31362
31363   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
31364     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
31365
313666.56.3.23 Absolute difference
31367.............................
31368
31369   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
31370     _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0'
31371
31372   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
31373     _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0'
31374
31375   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
31376     _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0'
31377
31378   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
31379     _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0'
31380
31381   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
31382     _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0'
31383
31384   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
31385     _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0'
31386
31387   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
31388     _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0'
31389
31390   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
31391     _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0'
31392
31393   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
31394     _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0'
31395
31396   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
31397     _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0'
31398
31399   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
31400     _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0'
31401
31402   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
31403     _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0'
31404
31405   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
31406     _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0'
31407
31408   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
31409     _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0'
31410
31411   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
31412     _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0'
31413
31414   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
31415     _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0'
31416
31417   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
31418     _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0'
31419
31420   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
31421     _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0'
31422
31423   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
31424     _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0'
31425
31426   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
31427     _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0'
31428
314296.56.3.24 Absolute difference and accumulate
31430............................................
31431
31432   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31433     _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0'
31434
31435   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31436     _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0'
31437
31438   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31439     _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0'
31440
31441   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
31442     _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0'
31443
31444   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
31445     _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0'
31446
31447   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
31448     _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0'
31449
31450   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31451     _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0'
31452
31453   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31454     _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0'
31455
31456   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31457     _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0'
31458
31459   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
31460     _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0'
31461
31462   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
31463     _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0'
31464
31465   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
31466     _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0'
31467
31468   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31469     _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0'
31470
31471   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31472     _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0'
31473
31474   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31475     _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0'
31476
31477   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
31478     _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0'
31479
31480   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
31481     _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0'
31482
31483   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
31484     _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0'
31485
314866.56.3.25 Maximum
31487.................
31488
31489   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
31490     _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0'
31491
31492   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
31493     _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0'
31494
31495   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
31496     _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0'
31497
31498   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
31499     _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0'
31500
31501   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
31502     _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0'
31503
31504   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
31505     _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0'
31506
31507   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
31508     _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0'
31509
31510   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
31511     _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0'
31512
31513   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
31514     _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0'
31515
31516   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
31517     _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0'
31518
31519   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
31520     _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0'
31521
31522   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
31523     _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0'
31524
31525   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
31526     _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0'
31527
31528   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
31529     _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0'
31530
315316.56.3.26 Minimum
31532.................
31533
31534   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
31535     _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0'
31536
31537   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
31538     _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0'
31539
31540   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
31541     _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0'
31542
31543   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
31544     _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0'
31545
31546   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
31547     _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0'
31548
31549   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
31550     _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0'
31551
31552   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
31553     _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0'
31554
31555   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
31556     _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0'
31557
31558   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
31559     _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0'
31560
31561   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
31562     _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0'
31563
31564   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
31565     _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0'
31566
31567   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
31568     _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0'
31569
31570   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
31571     _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0'
31572
31573   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
31574     _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0'
31575
315766.56.3.27 Pairwise add
31577......................
31578
31579   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
31580     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
31581
31582   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
31583     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
31584
31585   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
31586     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
31587
31588   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
31589     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
31590
31591   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
31592     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
31593
31594   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
31595     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
31596
31597   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
31598     _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0'
31599
31600   * uint64x1_t vpaddl_u32 (uint32x2_t)
31601     _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0'
31602
31603   * uint32x2_t vpaddl_u16 (uint16x4_t)
31604     _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0'
31605
31606   * uint16x4_t vpaddl_u8 (uint8x8_t)
31607     _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0'
31608
31609   * int64x1_t vpaddl_s32 (int32x2_t)
31610     _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0'
31611
31612   * int32x2_t vpaddl_s16 (int16x4_t)
31613     _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0'
31614
31615   * int16x4_t vpaddl_s8 (int8x8_t)
31616     _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0'
31617
31618   * uint64x2_t vpaddlq_u32 (uint32x4_t)
31619     _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0'
31620
31621   * uint32x4_t vpaddlq_u16 (uint16x8_t)
31622     _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0'
31623
31624   * uint16x8_t vpaddlq_u8 (uint8x16_t)
31625     _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0'
31626
31627   * int64x2_t vpaddlq_s32 (int32x4_t)
31628     _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0'
31629
31630   * int32x4_t vpaddlq_s16 (int16x8_t)
31631     _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0'
31632
31633   * int16x8_t vpaddlq_s8 (int8x16_t)
31634     _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0'
31635
316366.56.3.28 Pairwise add, single_opcode widen and accumulate
31637..........................................................
31638
31639   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
31640     _Form of expected instruction(s):_ 'vpadal.u32 D0, D0'
31641
31642   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
31643     _Form of expected instruction(s):_ 'vpadal.u16 D0, D0'
31644
31645   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
31646     _Form of expected instruction(s):_ 'vpadal.u8 D0, D0'
31647
31648   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
31649     _Form of expected instruction(s):_ 'vpadal.s32 D0, D0'
31650
31651   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
31652     _Form of expected instruction(s):_ 'vpadal.s16 D0, D0'
31653
31654   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
31655     _Form of expected instruction(s):_ 'vpadal.s8 D0, D0'
31656
31657   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
31658     _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0'
31659
31660   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
31661     _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0'
31662
31663   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
31664     _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0'
31665
31666   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
31667     _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0'
31668
31669   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
31670     _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0'
31671
31672   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
31673     _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0'
31674
316756.56.3.29 Folding maximum
31676.........................
31677
31678   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
31679     _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0'
31680
31681   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
31682     _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0'
31683
31684   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
31685     _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0'
31686
31687   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
31688     _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0'
31689
31690   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
31691     _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0'
31692
31693   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
31694     _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0'
31695
31696   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
31697     _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0'
31698
316996.56.3.30 Folding minimum
31700.........................
31701
31702   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
31703     _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0'
31704
31705   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
31706     _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0'
31707
31708   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
31709     _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0'
31710
31711   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
31712     _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0'
31713
31714   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
31715     _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0'
31716
31717   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
31718     _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0'
31719
31720   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
31721     _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0'
31722
317236.56.3.31 Reciprocal step
31724.........................
31725
31726   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
31727     _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0'
31728
31729   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
31730     _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0'
31731
31732   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
31733     _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0'
31734
31735   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
31736     _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0'
31737
317386.56.3.32 Vector shift left
31739...........................
31740
31741   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
31742     _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0'
31743
31744   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
31745     _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0'
31746
31747   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
31748     _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0'
31749
31750   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
31751     _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0'
31752
31753   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
31754     _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0'
31755
31756   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
31757     _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0'
31758
31759   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
31760     _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0'
31761
31762   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
31763     _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0'
31764
31765   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
31766     _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0'
31767
31768   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
31769     _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0'
31770
31771   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
31772     _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0'
31773
31774   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
31775     _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0'
31776
31777   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
31778     _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0'
31779
31780   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
31781     _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0'
31782
31783   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
31784     _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0'
31785
31786   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
31787     _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0'
31788
31789   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
31790     _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0'
31791
31792   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
31793     _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0'
31794
31795   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
31796     _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0'
31797
31798   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
31799     _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0'
31800
31801   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
31802     _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0'
31803
31804   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
31805     _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0'
31806
31807   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
31808     _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0'
31809
31810   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
31811     _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0'
31812
31813   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
31814     _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0'
31815
31816   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
31817     _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0'
31818
31819   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
31820     _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0'
31821
31822   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
31823     _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0'
31824
31825   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
31826     _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0'
31827
31828   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
31829     _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0'
31830
31831   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
31832     _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0'
31833
31834   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
31835     _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0'
31836
31837   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
31838     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0'
31839
31840   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
31841     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0'
31842
31843   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
31844     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0'
31845
31846   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
31847     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0'
31848
31849   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
31850     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0'
31851
31852   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
31853     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0'
31854
31855   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
31856     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0'
31857
31858   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
31859     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0'
31860
31861   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
31862     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0'
31863
31864   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
31865     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0'
31866
31867   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
31868     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0'
31869
31870   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
31871     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0'
31872
31873   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
31874     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0'
31875
31876   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
31877     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0'
31878
31879   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
31880     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0'
31881
31882   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
31883     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0'
31884
31885   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
31886     _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0'
31887
31888   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
31889     _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0'
31890
31891   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
31892     _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0'
31893
31894   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
31895     _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0'
31896
31897   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
31898     _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0'
31899
31900   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
31901     _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0'
31902
31903   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
31904     _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0'
31905
31906   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
31907     _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0'
31908
31909   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
31910     _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0'
31911
31912   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
31913     _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0'
31914
31915   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
31916     _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0'
31917
31918   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
31919     _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0'
31920
31921   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
31922     _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0'
31923
31924   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
31925     _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0'
31926
31927   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
31928     _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0'
31929
31930   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
31931     _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0'
31932
319336.56.3.33 Vector shift left by constant
31934.......................................
31935
31936   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
31937     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
31938
31939   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
31940     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
31941
31942   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
31943     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
31944
31945   * int32x2_t vshl_n_s32 (int32x2_t, const int)
31946     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
31947
31948   * int16x4_t vshl_n_s16 (int16x4_t, const int)
31949     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
31950
31951   * int8x8_t vshl_n_s8 (int8x8_t, const int)
31952     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
31953
31954   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
31955     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
31956
31957   * int64x1_t vshl_n_s64 (int64x1_t, const int)
31958     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
31959
31960   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
31961     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
31962
31963   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
31964     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
31965
31966   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
31967     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
31968
31969   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
31970     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
31971
31972   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
31973     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
31974
31975   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
31976     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
31977
31978   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
31979     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
31980
31981   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
31982     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
31983
31984   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
31985     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0'
31986
31987   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
31988     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0'
31989
31990   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
31991     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0'
31992
31993   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
31994     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0'
31995
31996   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
31997     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0'
31998
31999   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
32000     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0'
32001
32002   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
32003     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0'
32004
32005   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
32006     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0'
32007
32008   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
32009     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0'
32010
32011   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
32012     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0'
32013
32014   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
32015     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0'
32016
32017   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
32018     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0'
32019
32020   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
32021     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0'
32022
32023   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
32024     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0'
32025
32026   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
32027     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0'
32028
32029   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
32030     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0'
32031
32032   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
32033     _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0'
32034
32035   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
32036     _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0'
32037
32038   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
32039     _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0'
32040
32041   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
32042     _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0'
32043
32044   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
32045     _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0'
32046
32047   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
32048     _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0'
32049
32050   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
32051     _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0'
32052
32053   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
32054     _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0'
32055
32056   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
32057     _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0'
32058
32059   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
32060     _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0'
32061
32062   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
32063     _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0'
32064
32065   * int64x2_t vshll_n_s32 (int32x2_t, const int)
32066     _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0'
32067
32068   * int32x4_t vshll_n_s16 (int16x4_t, const int)
32069     _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0'
32070
32071   * int16x8_t vshll_n_s8 (int8x8_t, const int)
32072     _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0'
32073
320746.56.3.34 Vector shift right by constant
32075........................................
32076
32077   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
32078     _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0'
32079
32080   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
32081     _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0'
32082
32083   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
32084     _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0'
32085
32086   * int32x2_t vshr_n_s32 (int32x2_t, const int)
32087     _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0'
32088
32089   * int16x4_t vshr_n_s16 (int16x4_t, const int)
32090     _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0'
32091
32092   * int8x8_t vshr_n_s8 (int8x8_t, const int)
32093     _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0'
32094
32095   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
32096     _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0'
32097
32098   * int64x1_t vshr_n_s64 (int64x1_t, const int)
32099     _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0'
32100
32101   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
32102     _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0'
32103
32104   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
32105     _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0'
32106
32107   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
32108     _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0'
32109
32110   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
32111     _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0'
32112
32113   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
32114     _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0'
32115
32116   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
32117     _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0'
32118
32119   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
32120     _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0'
32121
32122   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
32123     _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0'
32124
32125   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
32126     _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0'
32127
32128   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
32129     _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0'
32130
32131   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
32132     _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0'
32133
32134   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
32135     _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0'
32136
32137   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
32138     _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0'
32139
32140   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
32141     _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0'
32142
32143   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
32144     _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0'
32145
32146   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
32147     _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0'
32148
32149   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
32150     _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0'
32151
32152   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
32153     _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0'
32154
32155   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
32156     _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0'
32157
32158   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
32159     _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0'
32160
32161   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
32162     _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0'
32163
32164   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
32165     _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0'
32166
32167   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
32168     _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0'
32169
32170   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
32171     _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0'
32172
32173   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
32174     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
32175
32176   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
32177     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
32178
32179   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
32180     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
32181
32182   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
32183     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
32184
32185   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
32186     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
32187
32188   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
32189     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
32190
32191   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
32192     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
32193
32194   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
32195     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
32196
32197   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
32198     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
32199
32200   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
32201     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
32202
32203   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
32204     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
32205
32206   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
32207     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
32208
32209   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
32210     _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0'
32211
32212   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
32213     _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0'
32214
32215   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
32216     _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0'
32217
32218   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
32219     _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0'
32220
32221   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
32222     _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0'
32223
32224   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
32225     _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0'
32226
32227   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
32228     _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0'
32229
32230   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
32231     _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0'
32232
32233   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
32234     _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0'
32235
32236   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
32237     _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0'
32238
32239   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
32240     _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0'
32241
32242   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
32243     _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0'
32244
32245   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
32246     _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0'
32247
32248   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
32249     _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0'
32250
32251   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
32252     _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0'
32253
32254   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
32255     _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0'
32256
32257   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
32258     _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0'
32259
32260   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
32261     _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0'
32262
322636.56.3.35 Vector shift right by constant and accumulate
32264.......................................................
32265
32266   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32267     _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0'
32268
32269   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32270     _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0'
32271
32272   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32273     _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0'
32274
32275   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
32276     _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0'
32277
32278   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
32279     _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0'
32280
32281   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
32282     _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0'
32283
32284   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32285     _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0'
32286
32287   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
32288     _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0'
32289
32290   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32291     _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0'
32292
32293   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32294     _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0'
32295
32296   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32297     _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0'
32298
32299   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
32300     _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0'
32301
32302   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
32303     _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0'
32304
32305   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
32306     _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0'
32307
32308   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32309     _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0'
32310
32311   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
32312     _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0'
32313
32314   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32315     _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0'
32316
32317   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32318     _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0'
32319
32320   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32321     _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0'
32322
32323   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
32324     _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0'
32325
32326   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
32327     _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0'
32328
32329   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
32330     _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0'
32331
32332   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32333     _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0'
32334
32335   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
32336     _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0'
32337
32338   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32339     _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0'
32340
32341   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32342     _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0'
32343
32344   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32345     _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0'
32346
32347   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
32348     _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0'
32349
32350   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
32351     _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0'
32352
32353   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
32354     _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0'
32355
32356   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32357     _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0'
32358
32359   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
32360     _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0'
32361
323626.56.3.36 Vector shift right and insert
32363.......................................
32364
32365   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
32366     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
32367
32368   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
32369     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
32370
32371   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
32372     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
32373
32374   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
32375     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
32376
32377   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
32378     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
32379
32380   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
32381     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
32382
32383   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
32384     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
32385
32386   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
32387     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
32388
32389   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
32390     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
32391
32392   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
32393     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
32394
32395   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
32396     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
32397
32398   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
32399     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
32400
32401   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
32402     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
32403
32404   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
32405     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
32406
32407   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
32408     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
32409
32410   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
32411     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
32412
32413   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
32414     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
32415
32416   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
32417     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
32418
32419   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
32420     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
32421
32422   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
32423     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
32424
324256.56.3.37 Vector shift left and insert
32426......................................
32427
32428   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
32429     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
32430
32431   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
32432     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
32433
32434   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
32435     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
32436
32437   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
32438     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
32439
32440   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
32441     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
32442
32443   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
32444     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
32445
32446   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
32447     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
32448
32449   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
32450     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
32451
32452   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
32453     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
32454
32455   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
32456     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
32457
32458   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
32459     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
32460
32461   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
32462     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
32463
32464   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
32465     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
32466
32467   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
32468     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
32469
32470   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
32471     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
32472
32473   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
32474     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
32475
32476   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
32477     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
32478
32479   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
32480     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
32481
32482   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
32483     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
32484
32485   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
32486     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
32487
324886.56.3.38 Absolute value
32489........................
32490
32491   * float32x2_t vabs_f32 (float32x2_t)
32492     _Form of expected instruction(s):_ 'vabs.f32 D0, D0'
32493
32494   * int32x2_t vabs_s32 (int32x2_t)
32495     _Form of expected instruction(s):_ 'vabs.s32 D0, D0'
32496
32497   * int16x4_t vabs_s16 (int16x4_t)
32498     _Form of expected instruction(s):_ 'vabs.s16 D0, D0'
32499
32500   * int8x8_t vabs_s8 (int8x8_t)
32501     _Form of expected instruction(s):_ 'vabs.s8 D0, D0'
32502
32503   * float32x4_t vabsq_f32 (float32x4_t)
32504     _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0'
32505
32506   * int32x4_t vabsq_s32 (int32x4_t)
32507     _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0'
32508
32509   * int16x8_t vabsq_s16 (int16x8_t)
32510     _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0'
32511
32512   * int8x16_t vabsq_s8 (int8x16_t)
32513     _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0'
32514
32515   * int32x2_t vqabs_s32 (int32x2_t)
32516     _Form of expected instruction(s):_ 'vqabs.s32 D0, D0'
32517
32518   * int16x4_t vqabs_s16 (int16x4_t)
32519     _Form of expected instruction(s):_ 'vqabs.s16 D0, D0'
32520
32521   * int8x8_t vqabs_s8 (int8x8_t)
32522     _Form of expected instruction(s):_ 'vqabs.s8 D0, D0'
32523
32524   * int32x4_t vqabsq_s32 (int32x4_t)
32525     _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0'
32526
32527   * int16x8_t vqabsq_s16 (int16x8_t)
32528     _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0'
32529
32530   * int8x16_t vqabsq_s8 (int8x16_t)
32531     _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0'
32532
325336.56.3.39 Negation
32534..................
32535
32536   * float32x2_t vneg_f32 (float32x2_t)
32537     _Form of expected instruction(s):_ 'vneg.f32 D0, D0'
32538
32539   * int32x2_t vneg_s32 (int32x2_t)
32540     _Form of expected instruction(s):_ 'vneg.s32 D0, D0'
32541
32542   * int16x4_t vneg_s16 (int16x4_t)
32543     _Form of expected instruction(s):_ 'vneg.s16 D0, D0'
32544
32545   * int8x8_t vneg_s8 (int8x8_t)
32546     _Form of expected instruction(s):_ 'vneg.s8 D0, D0'
32547
32548   * float32x4_t vnegq_f32 (float32x4_t)
32549     _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0'
32550
32551   * int32x4_t vnegq_s32 (int32x4_t)
32552     _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0'
32553
32554   * int16x8_t vnegq_s16 (int16x8_t)
32555     _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0'
32556
32557   * int8x16_t vnegq_s8 (int8x16_t)
32558     _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0'
32559
32560   * int32x2_t vqneg_s32 (int32x2_t)
32561     _Form of expected instruction(s):_ 'vqneg.s32 D0, D0'
32562
32563   * int16x4_t vqneg_s16 (int16x4_t)
32564     _Form of expected instruction(s):_ 'vqneg.s16 D0, D0'
32565
32566   * int8x8_t vqneg_s8 (int8x8_t)
32567     _Form of expected instruction(s):_ 'vqneg.s8 D0, D0'
32568
32569   * int32x4_t vqnegq_s32 (int32x4_t)
32570     _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0'
32571
32572   * int16x8_t vqnegq_s16 (int16x8_t)
32573     _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0'
32574
32575   * int8x16_t vqnegq_s8 (int8x16_t)
32576     _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0'
32577
325786.56.3.40 Bitwise not
32579.....................
32580
32581   * uint32x2_t vmvn_u32 (uint32x2_t)
32582     _Form of expected instruction(s):_ 'vmvn D0, D0'
32583
32584   * uint16x4_t vmvn_u16 (uint16x4_t)
32585     _Form of expected instruction(s):_ 'vmvn D0, D0'
32586
32587   * uint8x8_t vmvn_u8 (uint8x8_t)
32588     _Form of expected instruction(s):_ 'vmvn D0, D0'
32589
32590   * int32x2_t vmvn_s32 (int32x2_t)
32591     _Form of expected instruction(s):_ 'vmvn D0, D0'
32592
32593   * int16x4_t vmvn_s16 (int16x4_t)
32594     _Form of expected instruction(s):_ 'vmvn D0, D0'
32595
32596   * int8x8_t vmvn_s8 (int8x8_t)
32597     _Form of expected instruction(s):_ 'vmvn D0, D0'
32598
32599   * poly8x8_t vmvn_p8 (poly8x8_t)
32600     _Form of expected instruction(s):_ 'vmvn D0, D0'
32601
32602   * uint32x4_t vmvnq_u32 (uint32x4_t)
32603     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32604
32605   * uint16x8_t vmvnq_u16 (uint16x8_t)
32606     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32607
32608   * uint8x16_t vmvnq_u8 (uint8x16_t)
32609     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32610
32611   * int32x4_t vmvnq_s32 (int32x4_t)
32612     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32613
32614   * int16x8_t vmvnq_s16 (int16x8_t)
32615     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32616
32617   * int8x16_t vmvnq_s8 (int8x16_t)
32618     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32619
32620   * poly8x16_t vmvnq_p8 (poly8x16_t)
32621     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
32622
326236.56.3.41 Count leading sign bits
32624.................................
32625
32626   * int32x2_t vcls_s32 (int32x2_t)
32627     _Form of expected instruction(s):_ 'vcls.s32 D0, D0'
32628
32629   * int16x4_t vcls_s16 (int16x4_t)
32630     _Form of expected instruction(s):_ 'vcls.s16 D0, D0'
32631
32632   * int8x8_t vcls_s8 (int8x8_t)
32633     _Form of expected instruction(s):_ 'vcls.s8 D0, D0'
32634
32635   * int32x4_t vclsq_s32 (int32x4_t)
32636     _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0'
32637
32638   * int16x8_t vclsq_s16 (int16x8_t)
32639     _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0'
32640
32641   * int8x16_t vclsq_s8 (int8x16_t)
32642     _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0'
32643
326446.56.3.42 Count leading zeros
32645.............................
32646
32647   * uint32x2_t vclz_u32 (uint32x2_t)
32648     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
32649
32650   * uint16x4_t vclz_u16 (uint16x4_t)
32651     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
32652
32653   * uint8x8_t vclz_u8 (uint8x8_t)
32654     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
32655
32656   * int32x2_t vclz_s32 (int32x2_t)
32657     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
32658
32659   * int16x4_t vclz_s16 (int16x4_t)
32660     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
32661
32662   * int8x8_t vclz_s8 (int8x8_t)
32663     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
32664
32665   * uint32x4_t vclzq_u32 (uint32x4_t)
32666     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
32667
32668   * uint16x8_t vclzq_u16 (uint16x8_t)
32669     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
32670
32671   * uint8x16_t vclzq_u8 (uint8x16_t)
32672     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
32673
32674   * int32x4_t vclzq_s32 (int32x4_t)
32675     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
32676
32677   * int16x8_t vclzq_s16 (int16x8_t)
32678     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
32679
32680   * int8x16_t vclzq_s8 (int8x16_t)
32681     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
32682
326836.56.3.43 Count number of set bits
32684..................................
32685
32686   * uint8x8_t vcnt_u8 (uint8x8_t)
32687     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
32688
32689   * int8x8_t vcnt_s8 (int8x8_t)
32690     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
32691
32692   * poly8x8_t vcnt_p8 (poly8x8_t)
32693     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
32694
32695   * uint8x16_t vcntq_u8 (uint8x16_t)
32696     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
32697
32698   * int8x16_t vcntq_s8 (int8x16_t)
32699     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
32700
32701   * poly8x16_t vcntq_p8 (poly8x16_t)
32702     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
32703
327046.56.3.44 Reciprocal estimate
32705.............................
32706
32707   * float32x2_t vrecpe_f32 (float32x2_t)
32708     _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0'
32709
32710   * uint32x2_t vrecpe_u32 (uint32x2_t)
32711     _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0'
32712
32713   * float32x4_t vrecpeq_f32 (float32x4_t)
32714     _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0'
32715
32716   * uint32x4_t vrecpeq_u32 (uint32x4_t)
32717     _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0'
32718
327196.56.3.45 Reciprocal square-root estimate
32720.........................................
32721
32722   * float32x2_t vrsqrte_f32 (float32x2_t)
32723     _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0'
32724
32725   * uint32x2_t vrsqrte_u32 (uint32x2_t)
32726     _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0'
32727
32728   * float32x4_t vrsqrteq_f32 (float32x4_t)
32729     _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0'
32730
32731   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
32732     _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0'
32733
327346.56.3.46 Get lanes from a vector
32735.................................
32736
32737   * uint32_t vget_lane_u32 (uint32x2_t, const int)
32738     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32739
32740   * uint16_t vget_lane_u16 (uint16x4_t, const int)
32741     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
32742
32743   * uint8_t vget_lane_u8 (uint8x8_t, const int)
32744     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
32745
32746   * int32_t vget_lane_s32 (int32x2_t, const int)
32747     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32748
32749   * int16_t vget_lane_s16 (int16x4_t, const int)
32750     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
32751
32752   * int8_t vget_lane_s8 (int8x8_t, const int)
32753     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
32754
32755   * float32_t vget_lane_f32 (float32x2_t, const int)
32756     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32757
32758   * poly16_t vget_lane_p16 (poly16x4_t, const int)
32759     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
32760
32761   * poly8_t vget_lane_p8 (poly8x8_t, const int)
32762     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
32763
32764   * uint64_t vget_lane_u64 (uint64x1_t, const int)
32765
32766   * int64_t vget_lane_s64 (int64x1_t, const int)
32767
32768   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
32769     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32770
32771   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
32772     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
32773
32774   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
32775     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
32776
32777   * int32_t vgetq_lane_s32 (int32x4_t, const int)
32778     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32779
32780   * int16_t vgetq_lane_s16 (int16x8_t, const int)
32781     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
32782
32783   * int8_t vgetq_lane_s8 (int8x16_t, const int)
32784     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
32785
32786   * float32_t vgetq_lane_f32 (float32x4_t, const int)
32787     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
32788
32789   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
32790     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
32791
32792   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
32793     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
32794
32795   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
32796     _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
32797     R0, R0, D0'
32798
32799   * int64_t vgetq_lane_s64 (int64x2_t, const int)
32800     _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
32801     R0, R0, D0'
32802
328036.56.3.47 Set lanes in a vector
32804...............................
32805
32806   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
32807     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32808
32809   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
32810     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32811
32812   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
32813     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32814
32815   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
32816     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32817
32818   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
32819     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32820
32821   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
32822     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32823
32824   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
32825     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32826
32827   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
32828     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32829
32830   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
32831     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32832
32833   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
32834
32835   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
32836
32837   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
32838     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32839
32840   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
32841     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32842
32843   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
32844     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32845
32846   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
32847     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32848
32849   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
32850     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32851
32852   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
32853     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32854
32855   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
32856     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
32857
32858   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
32859     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
32860
32861   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
32862     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
32863
32864   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
32865     _Form of expected instruction(s):_ 'vmov D0, R0, R0'
32866
32867   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
32868     _Form of expected instruction(s):_ 'vmov D0, R0, R0'
32869
328706.56.3.48 Create vector from literal bit pattern
32871................................................
32872
32873   * uint32x2_t vcreate_u32 (uint64_t)
32874
32875   * uint16x4_t vcreate_u16 (uint64_t)
32876
32877   * uint8x8_t vcreate_u8 (uint64_t)
32878
32879   * int32x2_t vcreate_s32 (uint64_t)
32880
32881   * int16x4_t vcreate_s16 (uint64_t)
32882
32883   * int8x8_t vcreate_s8 (uint64_t)
32884
32885   * uint64x1_t vcreate_u64 (uint64_t)
32886
32887   * int64x1_t vcreate_s64 (uint64_t)
32888
32889   * float32x2_t vcreate_f32 (uint64_t)
32890
32891   * poly16x4_t vcreate_p16 (uint64_t)
32892
32893   * poly8x8_t vcreate_p8 (uint64_t)
32894
328956.56.3.49 Set all lanes to the same value
32896.........................................
32897
32898   * uint32x2_t vdup_n_u32 (uint32_t)
32899     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32900
32901   * uint16x4_t vdup_n_u16 (uint16_t)
32902     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32903
32904   * uint8x8_t vdup_n_u8 (uint8_t)
32905     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32906
32907   * int32x2_t vdup_n_s32 (int32_t)
32908     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32909
32910   * int16x4_t vdup_n_s16 (int16_t)
32911     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32912
32913   * int8x8_t vdup_n_s8 (int8_t)
32914     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32915
32916   * float32x2_t vdup_n_f32 (float32_t)
32917     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32918
32919   * poly16x4_t vdup_n_p16 (poly16_t)
32920     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32921
32922   * poly8x8_t vdup_n_p8 (poly8_t)
32923     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32924
32925   * uint64x1_t vdup_n_u64 (uint64_t)
32926
32927   * int64x1_t vdup_n_s64 (int64_t)
32928
32929   * uint32x4_t vdupq_n_u32 (uint32_t)
32930     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
32931
32932   * uint16x8_t vdupq_n_u16 (uint16_t)
32933     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
32934
32935   * uint8x16_t vdupq_n_u8 (uint8_t)
32936     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
32937
32938   * int32x4_t vdupq_n_s32 (int32_t)
32939     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
32940
32941   * int16x8_t vdupq_n_s16 (int16_t)
32942     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
32943
32944   * int8x16_t vdupq_n_s8 (int8_t)
32945     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
32946
32947   * float32x4_t vdupq_n_f32 (float32_t)
32948     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
32949
32950   * poly16x8_t vdupq_n_p16 (poly16_t)
32951     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
32952
32953   * poly8x16_t vdupq_n_p8 (poly8_t)
32954     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
32955
32956   * uint64x2_t vdupq_n_u64 (uint64_t)
32957
32958   * int64x2_t vdupq_n_s64 (int64_t)
32959
32960   * uint32x2_t vmov_n_u32 (uint32_t)
32961     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32962
32963   * uint16x4_t vmov_n_u16 (uint16_t)
32964     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32965
32966   * uint8x8_t vmov_n_u8 (uint8_t)
32967     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32968
32969   * int32x2_t vmov_n_s32 (int32_t)
32970     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32971
32972   * int16x4_t vmov_n_s16 (int16_t)
32973     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32974
32975   * int8x8_t vmov_n_s8 (int8_t)
32976     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32977
32978   * float32x2_t vmov_n_f32 (float32_t)
32979     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
32980
32981   * poly16x4_t vmov_n_p16 (poly16_t)
32982     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
32983
32984   * poly8x8_t vmov_n_p8 (poly8_t)
32985     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
32986
32987   * uint64x1_t vmov_n_u64 (uint64_t)
32988
32989   * int64x1_t vmov_n_s64 (int64_t)
32990
32991   * uint32x4_t vmovq_n_u32 (uint32_t)
32992     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
32993
32994   * uint16x8_t vmovq_n_u16 (uint16_t)
32995     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
32996
32997   * uint8x16_t vmovq_n_u8 (uint8_t)
32998     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
32999
33000   * int32x4_t vmovq_n_s32 (int32_t)
33001     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
33002
33003   * int16x8_t vmovq_n_s16 (int16_t)
33004     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
33005
33006   * int8x16_t vmovq_n_s8 (int8_t)
33007     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
33008
33009   * float32x4_t vmovq_n_f32 (float32_t)
33010     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
33011
33012   * poly16x8_t vmovq_n_p16 (poly16_t)
33013     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
33014
33015   * poly8x16_t vmovq_n_p8 (poly8_t)
33016     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
33017
33018   * uint64x2_t vmovq_n_u64 (uint64_t)
33019
33020   * int64x2_t vmovq_n_s64 (int64_t)
33021
33022   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
33023     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
33024
33025   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
33026     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
33027
33028   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
33029     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
33030
33031   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
33032     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
33033
33034   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
33035     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
33036
33037   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
33038     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
33039
33040   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
33041     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
33042
33043   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
33044     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
33045
33046   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
33047     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
33048
33049   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
33050
33051   * int64x1_t vdup_lane_s64 (int64x1_t, const int)
33052
33053   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
33054     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
33055
33056   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
33057     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
33058
33059   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
33060     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
33061
33062   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
33063     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
33064
33065   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
33066     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
33067
33068   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
33069     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
33070
33071   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
33072     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
33073
33074   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
33075     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
33076
33077   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
33078     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
33079
33080   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
33081
33082   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
33083
330846.56.3.50 Combining vectors
33085...........................
33086
33087   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
33088
33089   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
33090
33091   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
33092
33093   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
33094
33095   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
33096
33097   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
33098
33099   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
33100
33101   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
33102
33103   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
33104
33105   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
33106
33107   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
33108
331096.56.3.51 Splitting vectors
33110...........................
33111
33112   * uint32x2_t vget_high_u32 (uint32x4_t)
33113
33114   * uint16x4_t vget_high_u16 (uint16x8_t)
33115
33116   * uint8x8_t vget_high_u8 (uint8x16_t)
33117
33118   * int32x2_t vget_high_s32 (int32x4_t)
33119
33120   * int16x4_t vget_high_s16 (int16x8_t)
33121
33122   * int8x8_t vget_high_s8 (int8x16_t)
33123
33124   * uint64x1_t vget_high_u64 (uint64x2_t)
33125
33126   * int64x1_t vget_high_s64 (int64x2_t)
33127
33128   * float32x2_t vget_high_f32 (float32x4_t)
33129
33130   * poly16x4_t vget_high_p16 (poly16x8_t)
33131
33132   * poly8x8_t vget_high_p8 (poly8x16_t)
33133
33134   * uint32x2_t vget_low_u32 (uint32x4_t)
33135     _Form of expected instruction(s):_ 'vmov D0, D0'
33136
33137   * uint16x4_t vget_low_u16 (uint16x8_t)
33138     _Form of expected instruction(s):_ 'vmov D0, D0'
33139
33140   * uint8x8_t vget_low_u8 (uint8x16_t)
33141     _Form of expected instruction(s):_ 'vmov D0, D0'
33142
33143   * int32x2_t vget_low_s32 (int32x4_t)
33144     _Form of expected instruction(s):_ 'vmov D0, D0'
33145
33146   * int16x4_t vget_low_s16 (int16x8_t)
33147     _Form of expected instruction(s):_ 'vmov D0, D0'
33148
33149   * int8x8_t vget_low_s8 (int8x16_t)
33150     _Form of expected instruction(s):_ 'vmov D0, D0'
33151
33152   * float32x2_t vget_low_f32 (float32x4_t)
33153     _Form of expected instruction(s):_ 'vmov D0, D0'
33154
33155   * poly16x4_t vget_low_p16 (poly16x8_t)
33156     _Form of expected instruction(s):_ 'vmov D0, D0'
33157
33158   * poly8x8_t vget_low_p8 (poly8x16_t)
33159     _Form of expected instruction(s):_ 'vmov D0, D0'
33160
33161   * uint64x1_t vget_low_u64 (uint64x2_t)
33162
33163   * int64x1_t vget_low_s64 (int64x2_t)
33164
331656.56.3.52 Conversions
33166.....................
33167
33168   * float32x2_t vcvt_f32_u32 (uint32x2_t)
33169     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0'
33170
33171   * float32x2_t vcvt_f32_s32 (int32x2_t)
33172     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0'
33173
33174   * uint32x2_t vcvt_u32_f32 (float32x2_t)
33175     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0'
33176
33177   * int32x2_t vcvt_s32_f32 (float32x2_t)
33178     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0'
33179
33180   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
33181     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0'
33182
33183   * float32x4_t vcvtq_f32_s32 (int32x4_t)
33184     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0'
33185
33186   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
33187     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0'
33188
33189   * int32x4_t vcvtq_s32_f32 (float32x4_t)
33190     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0'
33191
33192   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
33193     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0'
33194
33195   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
33196     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0'
33197
33198   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
33199     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0'
33200
33201   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
33202     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0'
33203
33204   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
33205     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0'
33206
33207   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
33208     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0'
33209
33210   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
33211     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0'
33212
33213   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
33214     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0'
33215
332166.56.3.53 Move, single_opcode narrowing
33217.......................................
33218
33219   * uint32x2_t vmovn_u64 (uint64x2_t)
33220     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
33221
33222   * uint16x4_t vmovn_u32 (uint32x4_t)
33223     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
33224
33225   * uint8x8_t vmovn_u16 (uint16x8_t)
33226     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
33227
33228   * int32x2_t vmovn_s64 (int64x2_t)
33229     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
33230
33231   * int16x4_t vmovn_s32 (int32x4_t)
33232     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
33233
33234   * int8x8_t vmovn_s16 (int16x8_t)
33235     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
33236
33237   * uint32x2_t vqmovn_u64 (uint64x2_t)
33238     _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0'
33239
33240   * uint16x4_t vqmovn_u32 (uint32x4_t)
33241     _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0'
33242
33243   * uint8x8_t vqmovn_u16 (uint16x8_t)
33244     _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0'
33245
33246   * int32x2_t vqmovn_s64 (int64x2_t)
33247     _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0'
33248
33249   * int16x4_t vqmovn_s32 (int32x4_t)
33250     _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0'
33251
33252   * int8x8_t vqmovn_s16 (int16x8_t)
33253     _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0'
33254
33255   * uint32x2_t vqmovun_s64 (int64x2_t)
33256     _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0'
33257
33258   * uint16x4_t vqmovun_s32 (int32x4_t)
33259     _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0'
33260
33261   * uint8x8_t vqmovun_s16 (int16x8_t)
33262     _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0'
33263
332646.56.3.54 Move, single_opcode long
33265..................................
33266
33267   * uint64x2_t vmovl_u32 (uint32x2_t)
33268     _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0'
33269
33270   * uint32x4_t vmovl_u16 (uint16x4_t)
33271     _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0'
33272
33273   * uint16x8_t vmovl_u8 (uint8x8_t)
33274     _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0'
33275
33276   * int64x2_t vmovl_s32 (int32x2_t)
33277     _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0'
33278
33279   * int32x4_t vmovl_s16 (int16x4_t)
33280     _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0'
33281
33282   * int16x8_t vmovl_s8 (int8x8_t)
33283     _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0'
33284
332856.56.3.55 Table lookup
33286......................
33287
33288   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
33289     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
33290
33291   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
33292     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
33293
33294   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
33295     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
33296
33297   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
33298     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
33299
33300   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
33301     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
33302
33303   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
33304     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
33305
33306   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
33307     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
33308
33309   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
33310     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
33311
33312   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
33313     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
33314
33315   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
33316     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
33317     D0'
33318
33319   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
33320     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
33321     D0'
33322
33323   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
33324     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
33325     D0'
33326
333276.56.3.56 Extended table lookup
33328...............................
33329
33330   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
33331     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
33332
33333   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
33334     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
33335
33336   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33337     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
33338
33339   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
33340     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
33341
33342   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
33343     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
33344
33345   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
33346     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
33347
33348   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
33349     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
33350
33351   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
33352     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
33353
33354   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
33355     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
33356
33357   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
33358     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
33359     D0'
33360
33361   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
33362     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
33363     D0'
33364
33365   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
33366     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
33367     D0'
33368
333696.56.3.57 Multiply, lane
33370........................
33371
33372   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
33373     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
33374
33375   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
33376     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
33377
33378   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
33379     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
33380
33381   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
33382     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
33383
33384   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
33385     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
33386
33387   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
33388     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
33389
33390   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
33391     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
33392
33393   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
33394     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
33395
33396   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
33397     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
33398
33399   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
33400     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
33401
334026.56.3.58 Long multiply, lane
33403.............................
33404
33405   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
33406     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
33407
33408   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
33409     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
33410
33411   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
33412     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
33413
33414   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
33415     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
33416
334176.56.3.59 Saturating doubling long multiply, lane
33418.................................................
33419
33420   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
33421     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
33422
33423   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
33424     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
33425
334266.56.3.60 Saturating doubling multiply high, lane
33427.................................................
33428
33429   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33430     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
33431
33432   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33433     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
33434
33435   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33436     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
33437
33438   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33439     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
33440
33441   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33442     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
33443
33444   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33445     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
33446
33447   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33448     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
33449
33450   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33451     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
33452
334536.56.3.61 Multiply-accumulate, lane
33454...................................
33455
33456   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33457     const int)
33458     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
33459
33460   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
33461     int)
33462     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
33463
33464   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
33465     int)
33466     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
33467
33468   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33469     int)
33470     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
33471
33472   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33473     int)
33474     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
33475
33476   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33477     const int)
33478     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
33479
33480   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33481     const int)
33482     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
33483
33484   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33485     const int)
33486     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
33487
33488   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33489     int)
33490     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
33491
33492   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33493     int)
33494     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
33495
33496   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33497     const int)
33498     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
33499
33500   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33501     const int)
33502     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
33503
33504   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33505     int)
33506     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
33507
33508   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33509     int)
33510     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
33511
33512   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33513     int)
33514     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
33515
33516   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33517     int)
33518     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
33519
335206.56.3.62 Multiply-subtract, lane
33521.................................
33522
33523   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33524     const int)
33525     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
33526
33527   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
33528     int)
33529     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
33530
33531   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
33532     int)
33533     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
33534
33535   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33536     int)
33537     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
33538
33539   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33540     int)
33541     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
33542
33543   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33544     const int)
33545     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
33546
33547   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33548     const int)
33549     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
33550
33551   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33552     const int)
33553     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
33554
33555   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33556     int)
33557     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
33558
33559   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33560     int)
33561     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
33562
33563   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33564     const int)
33565     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
33566
33567   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33568     const int)
33569     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
33570
33571   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33572     int)
33573     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
33574
33575   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33576     int)
33577     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
33578
33579   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33580     int)
33581     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
33582
33583   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33584     int)
33585     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
33586
335876.56.3.63 Vector multiply by scalar
33588...................................
33589
33590   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
33591     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
33592
33593   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
33594     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
33595
33596   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
33597     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
33598
33599   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
33600     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
33601
33602   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
33603     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
33604
33605   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
33606     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
33607
33608   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
33609     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
33610
33611   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
33612     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
33613
33614   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
33615     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
33616
33617   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
33618     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
33619
336206.56.3.64 Vector long multiply by scalar
33621........................................
33622
33623   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
33624     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
33625
33626   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
33627     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
33628
33629   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
33630     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
33631
33632   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
33633     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
33634
336356.56.3.65 Vector saturating doubling long multiply by scalar
33636............................................................
33637
33638   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
33639     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
33640
33641   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
33642     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
33643
336446.56.3.66 Vector saturating doubling multiply high by scalar
33645............................................................
33646
33647   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
33648     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
33649
33650   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
33651     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
33652
33653   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
33654     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
33655
33656   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
33657     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
33658
33659   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
33660     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
33661
33662   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
33663     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
33664
33665   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
33666     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
33667
33668   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
33669     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
33670
336716.56.3.67 Vector multiply-accumulate by scalar
33672..............................................
33673
33674   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
33675     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
33676
33677   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33678     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
33679
33680   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33681     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
33682
33683   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
33684     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
33685
33686   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
33687     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
33688
33689   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
33690     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
33691
33692   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33693     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
33694
33695   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33696     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
33697
33698   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
33699     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
33700
33701   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
33702     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
33703
33704   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33705     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
33706
33707   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33708     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
33709
33710   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33711     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
33712
33713   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33714     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
33715
33716   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33717     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
33718
33719   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33720     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
33721
337226.56.3.68 Vector multiply-subtract by scalar
33723............................................
33724
33725   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
33726     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
33727
33728   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33729     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
33730
33731   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33732     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
33733
33734   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
33735     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
33736
33737   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
33738     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
33739
33740   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
33741     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
33742
33743   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33744     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
33745
33746   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33747     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
33748
33749   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
33750     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
33751
33752   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
33753     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
33754
33755   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33756     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
33757
33758   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33759     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
33760
33761   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33762     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
33763
33764   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33765     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
33766
33767   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33768     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
33769
33770   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33771     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
33772
337736.56.3.69 Vector extract
33774........................
33775
33776   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
33777     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
33778
33779   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
33780     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
33781
33782   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
33783     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
33784
33785   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
33786     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
33787
33788   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
33789     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
33790
33791   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
33792     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
33793
33794   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
33795     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
33796
33797   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
33798     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
33799
33800   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
33801     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
33802
33803   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
33804     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
33805
33806   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
33807     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
33808
33809   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
33810     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
33811
33812   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
33813     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
33814
33815   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
33816     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
33817
33818   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
33819     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
33820
33821   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
33822     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
33823
33824   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
33825     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
33826
33827   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
33828     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
33829
33830   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
33831     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
33832
33833   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
33834     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
33835
33836   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
33837     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
33838
33839   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
33840     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
33841
338426.56.3.70 Reverse elements
33843..........................
33844
33845   * uint32x2_t vrev64_u32 (uint32x2_t)
33846     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
33847
33848   * uint16x4_t vrev64_u16 (uint16x4_t)
33849     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
33850
33851   * uint8x8_t vrev64_u8 (uint8x8_t)
33852     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
33853
33854   * int32x2_t vrev64_s32 (int32x2_t)
33855     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
33856
33857   * int16x4_t vrev64_s16 (int16x4_t)
33858     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
33859
33860   * int8x8_t vrev64_s8 (int8x8_t)
33861     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
33862
33863   * float32x2_t vrev64_f32 (float32x2_t)
33864     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
33865
33866   * poly16x4_t vrev64_p16 (poly16x4_t)
33867     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
33868
33869   * poly8x8_t vrev64_p8 (poly8x8_t)
33870     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
33871
33872   * uint32x4_t vrev64q_u32 (uint32x4_t)
33873     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
33874
33875   * uint16x8_t vrev64q_u16 (uint16x8_t)
33876     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
33877
33878   * uint8x16_t vrev64q_u8 (uint8x16_t)
33879     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
33880
33881   * int32x4_t vrev64q_s32 (int32x4_t)
33882     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
33883
33884   * int16x8_t vrev64q_s16 (int16x8_t)
33885     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
33886
33887   * int8x16_t vrev64q_s8 (int8x16_t)
33888     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
33889
33890   * float32x4_t vrev64q_f32 (float32x4_t)
33891     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
33892
33893   * poly16x8_t vrev64q_p16 (poly16x8_t)
33894     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
33895
33896   * poly8x16_t vrev64q_p8 (poly8x16_t)
33897     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
33898
33899   * uint16x4_t vrev32_u16 (uint16x4_t)
33900     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
33901
33902   * int16x4_t vrev32_s16 (int16x4_t)
33903     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
33904
33905   * uint8x8_t vrev32_u8 (uint8x8_t)
33906     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
33907
33908   * int8x8_t vrev32_s8 (int8x8_t)
33909     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
33910
33911   * poly16x4_t vrev32_p16 (poly16x4_t)
33912     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
33913
33914   * poly8x8_t vrev32_p8 (poly8x8_t)
33915     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
33916
33917   * uint16x8_t vrev32q_u16 (uint16x8_t)
33918     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
33919
33920   * int16x8_t vrev32q_s16 (int16x8_t)
33921     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
33922
33923   * uint8x16_t vrev32q_u8 (uint8x16_t)
33924     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
33925
33926   * int8x16_t vrev32q_s8 (int8x16_t)
33927     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
33928
33929   * poly16x8_t vrev32q_p16 (poly16x8_t)
33930     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
33931
33932   * poly8x16_t vrev32q_p8 (poly8x16_t)
33933     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
33934
33935   * uint8x8_t vrev16_u8 (uint8x8_t)
33936     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
33937
33938   * int8x8_t vrev16_s8 (int8x8_t)
33939     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
33940
33941   * poly8x8_t vrev16_p8 (poly8x8_t)
33942     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
33943
33944   * uint8x16_t vrev16q_u8 (uint8x16_t)
33945     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
33946
33947   * int8x16_t vrev16q_s8 (int8x16_t)
33948     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
33949
33950   * poly8x16_t vrev16q_p8 (poly8x16_t)
33951     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
33952
339536.56.3.71 Bit selection
33954.......................
33955
33956   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
33957     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33958     D0, D0' _or_ 'vbif D0, D0, D0'
33959
33960   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
33961     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33962     D0, D0' _or_ 'vbif D0, D0, D0'
33963
33964   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33965     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33966     D0, D0' _or_ 'vbif D0, D0, D0'
33967
33968   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
33969     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33970     D0, D0' _or_ 'vbif D0, D0, D0'
33971
33972   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
33973     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33974     D0, D0' _or_ 'vbif D0, D0, D0'
33975
33976   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
33977     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33978     D0, D0' _or_ 'vbif D0, D0, D0'
33979
33980   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
33981     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33982     D0, D0' _or_ 'vbif D0, D0, D0'
33983
33984   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
33985     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33986     D0, D0' _or_ 'vbif D0, D0, D0'
33987
33988   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
33989     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33990     D0, D0' _or_ 'vbif D0, D0, D0'
33991
33992   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
33993     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33994     D0, D0' _or_ 'vbif D0, D0, D0'
33995
33996   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
33997     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
33998     D0, D0' _or_ 'vbif D0, D0, D0'
33999
34000   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
34001     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34002     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34003
34004   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
34005     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34006     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34007
34008   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
34009     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34010     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34011
34012   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
34013     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34014     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34015
34016   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
34017     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34018     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34019
34020   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
34021     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34022     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34023
34024   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
34025     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34026     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34027
34028   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
34029     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34030     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34031
34032   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
34033     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34034     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34035
34036   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
34037     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34038     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34039
34040   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
34041     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
34042     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
34043
340446.56.3.72 Transpose elements
34045............................
34046
34047   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
34048     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
34049
34050   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
34051     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
34052
34053   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
34054     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
34055
34056   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
34057     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
34058
34059   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
34060     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
34061
34062   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
34063     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
34064
34065   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
34066     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34067
34068   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
34069     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34070
34071   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
34072     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34073
34074   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
34075     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
34076
34077   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
34078     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
34079
34080   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
34081     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
34082
34083   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
34084     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
34085
34086   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
34087     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
34088
34089   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
34090     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
34091
34092   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
34093     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
34094
34095   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
34096     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
34097
34098   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
34099     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
34100
341016.56.3.73 Zip elements
34102......................
34103
34104   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
34105     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
34106
34107   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
34108     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
34109
34110   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
34111     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
34112
34113   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
34114     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
34115
34116   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
34117     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
34118
34119   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
34120     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
34121
34122   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
34123     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34124
34125   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
34126     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34127
34128   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
34129     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34130
34131   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
34132     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
34133
34134   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
34135     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
34136
34137   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
34138     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
34139
34140   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
34141     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
34142
34143   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
34144     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
34145
34146   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
34147     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
34148
34149   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
34150     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
34151
34152   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
34153     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
34154
34155   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
34156     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
34157
341586.56.3.74 Unzip elements
34159........................
34160
34161   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
34162     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34163
34164   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
34165     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
34166
34167   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
34168     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
34169
34170   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
34171     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34172
34173   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
34174     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
34175
34176   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
34177     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
34178
34179   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
34180     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
34181
34182   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
34183     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
34184
34185   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
34186     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
34187
34188   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
34189     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
34190
34191   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
34192     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
34193
34194   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
34195     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
34196
34197   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
34198     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
34199
34200   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
34201     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
34202
34203   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
34204     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
34205
34206   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
34207     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
34208
34209   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
34210     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
34211
34212   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
34213     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
34214
342156.56.3.75 Element/structure loads, VLD1 variants
34216................................................
34217
34218   * uint32x2_t vld1_u32 (const uint32_t *)
34219     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
34220
34221   * uint16x4_t vld1_u16 (const uint16_t *)
34222     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
34223
34224   * uint8x8_t vld1_u8 (const uint8_t *)
34225     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
34226
34227   * int32x2_t vld1_s32 (const int32_t *)
34228     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
34229
34230   * int16x4_t vld1_s16 (const int16_t *)
34231     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
34232
34233   * int8x8_t vld1_s8 (const int8_t *)
34234     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
34235
34236   * uint64x1_t vld1_u64 (const uint64_t *)
34237     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34238
34239   * int64x1_t vld1_s64 (const int64_t *)
34240     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34241
34242   * float32x2_t vld1_f32 (const float32_t *)
34243     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
34244
34245   * poly16x4_t vld1_p16 (const poly16_t *)
34246     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
34247
34248   * poly8x8_t vld1_p8 (const poly8_t *)
34249     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
34250
34251   * uint32x4_t vld1q_u32 (const uint32_t *)
34252     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
34253
34254   * uint16x8_t vld1q_u16 (const uint16_t *)
34255     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
34256
34257   * uint8x16_t vld1q_u8 (const uint8_t *)
34258     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
34259
34260   * int32x4_t vld1q_s32 (const int32_t *)
34261     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
34262
34263   * int16x8_t vld1q_s16 (const int16_t *)
34264     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
34265
34266   * int8x16_t vld1q_s8 (const int8_t *)
34267     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
34268
34269   * uint64x2_t vld1q_u64 (const uint64_t *)
34270     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34271
34272   * int64x2_t vld1q_s64 (const int64_t *)
34273     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34274
34275   * float32x4_t vld1q_f32 (const float32_t *)
34276     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
34277
34278   * poly16x8_t vld1q_p16 (const poly16_t *)
34279     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
34280
34281   * poly8x16_t vld1q_p8 (const poly8_t *)
34282     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
34283
34284   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
34285     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34286
34287   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
34288     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34289
34290   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
34291     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34292
34293   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
34294     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34295
34296   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
34297     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34298
34299   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
34300     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34301
34302   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
34303     int)
34304     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34305
34306   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
34307     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34308
34309   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
34310     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34311
34312   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
34313     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34314
34315   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
34316     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34317
34318   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
34319
34320     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34321
34322   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
34323
34324     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34325
34326   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
34327     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34328
34329   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
34330     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34331
34332   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
34333     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34334
34335   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
34336     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34337
34338   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
34339     int)
34340     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
34341
34342   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
34343
34344     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
34345
34346   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
34347     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
34348
34349   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
34350
34351     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34352
34353   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
34354     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34355
34356   * uint32x2_t vld1_dup_u32 (const uint32_t *)
34357     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
34358
34359   * uint16x4_t vld1_dup_u16 (const uint16_t *)
34360     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
34361
34362   * uint8x8_t vld1_dup_u8 (const uint8_t *)
34363     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
34364
34365   * int32x2_t vld1_dup_s32 (const int32_t *)
34366     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
34367
34368   * int16x4_t vld1_dup_s16 (const int16_t *)
34369     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
34370
34371   * int8x8_t vld1_dup_s8 (const int8_t *)
34372     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
34373
34374   * float32x2_t vld1_dup_f32 (const float32_t *)
34375     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
34376
34377   * poly16x4_t vld1_dup_p16 (const poly16_t *)
34378     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
34379
34380   * poly8x8_t vld1_dup_p8 (const poly8_t *)
34381     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
34382
34383   * uint64x1_t vld1_dup_u64 (const uint64_t *)
34384     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34385
34386   * int64x1_t vld1_dup_s64 (const int64_t *)
34387     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34388
34389   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
34390     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
34391
34392   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
34393     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
34394
34395   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
34396     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
34397
34398   * int32x4_t vld1q_dup_s32 (const int32_t *)
34399     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
34400
34401   * int16x8_t vld1q_dup_s16 (const int16_t *)
34402     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
34403
34404   * int8x16_t vld1q_dup_s8 (const int8_t *)
34405     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
34406
34407   * float32x4_t vld1q_dup_f32 (const float32_t *)
34408     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
34409
34410   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
34411     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
34412
34413   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
34414     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
34415
34416   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
34417     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34418
34419   * int64x2_t vld1q_dup_s64 (const int64_t *)
34420     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
34421
344226.56.3.76 Element/structure stores, VST1 variants
34423.................................................
34424
34425   * void vst1_u32 (uint32_t *, uint32x2_t)
34426     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
34427
34428   * void vst1_u16 (uint16_t *, uint16x4_t)
34429     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
34430
34431   * void vst1_u8 (uint8_t *, uint8x8_t)
34432     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
34433
34434   * void vst1_s32 (int32_t *, int32x2_t)
34435     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
34436
34437   * void vst1_s16 (int16_t *, int16x4_t)
34438     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
34439
34440   * void vst1_s8 (int8_t *, int8x8_t)
34441     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
34442
34443   * void vst1_u64 (uint64_t *, uint64x1_t)
34444     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34445
34446   * void vst1_s64 (int64_t *, int64x1_t)
34447     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34448
34449   * void vst1_f32 (float32_t *, float32x2_t)
34450     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
34451
34452   * void vst1_p16 (poly16_t *, poly16x4_t)
34453     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
34454
34455   * void vst1_p8 (poly8_t *, poly8x8_t)
34456     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
34457
34458   * void vst1q_u32 (uint32_t *, uint32x4_t)
34459     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
34460
34461   * void vst1q_u16 (uint16_t *, uint16x8_t)
34462     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
34463
34464   * void vst1q_u8 (uint8_t *, uint8x16_t)
34465     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
34466
34467   * void vst1q_s32 (int32_t *, int32x4_t)
34468     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
34469
34470   * void vst1q_s16 (int16_t *, int16x8_t)
34471     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
34472
34473   * void vst1q_s8 (int8_t *, int8x16_t)
34474     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
34475
34476   * void vst1q_u64 (uint64_t *, uint64x2_t)
34477     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
34478
34479   * void vst1q_s64 (int64_t *, int64x2_t)
34480     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
34481
34482   * void vst1q_f32 (float32_t *, float32x4_t)
34483     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
34484
34485   * void vst1q_p16 (poly16_t *, poly16x8_t)
34486     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
34487
34488   * void vst1q_p8 (poly8_t *, poly8x16_t)
34489     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
34490
34491   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
34492     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34493
34494   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
34495     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34496
34497   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
34498     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34499
34500   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
34501     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34502
34503   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
34504     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34505
34506   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
34507     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34508
34509   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
34510     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34511
34512   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
34513     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34514
34515   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
34516     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34517
34518   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
34519     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34520
34521   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
34522     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34523
34524   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
34525     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34526
34527   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
34528     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34529
34530   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
34531     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34532
34533   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
34534     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34535
34536   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
34537     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34538
34539   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
34540     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34541
34542   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
34543     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
34544
34545   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
34546     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
34547
34548   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
34549     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
34550
34551   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
34552     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34553
34554   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
34555     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
34556
345576.56.3.77 Element/structure loads, VLD2 variants
34558................................................
34559
34560   * uint32x2x2_t vld2_u32 (const uint32_t *)
34561     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34562
34563   * uint16x4x2_t vld2_u16 (const uint16_t *)
34564     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34565
34566   * uint8x8x2_t vld2_u8 (const uint8_t *)
34567     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34568
34569   * int32x2x2_t vld2_s32 (const int32_t *)
34570     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34571
34572   * int16x4x2_t vld2_s16 (const int16_t *)
34573     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34574
34575   * int8x8x2_t vld2_s8 (const int8_t *)
34576     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34577
34578   * float32x2x2_t vld2_f32 (const float32_t *)
34579     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34580
34581   * poly16x4x2_t vld2_p16 (const poly16_t *)
34582     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34583
34584   * poly8x8x2_t vld2_p8 (const poly8_t *)
34585     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34586
34587   * uint64x1x2_t vld2_u64 (const uint64_t *)
34588     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34589
34590   * int64x1x2_t vld2_s64 (const int64_t *)
34591     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34592
34593   * uint32x4x2_t vld2q_u32 (const uint32_t *)
34594     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34595
34596   * uint16x8x2_t vld2q_u16 (const uint16_t *)
34597     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34598
34599   * uint8x16x2_t vld2q_u8 (const uint8_t *)
34600     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34601
34602   * int32x4x2_t vld2q_s32 (const int32_t *)
34603     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34604
34605   * int16x8x2_t vld2q_s16 (const int16_t *)
34606     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34607
34608   * int8x16x2_t vld2q_s8 (const int8_t *)
34609     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34610
34611   * float32x4x2_t vld2q_f32 (const float32_t *)
34612     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
34613
34614   * poly16x8x2_t vld2q_p16 (const poly16_t *)
34615     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
34616
34617   * poly8x16x2_t vld2q_p8 (const poly8_t *)
34618     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
34619
34620   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
34621     int)
34622     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34623
34624   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
34625     int)
34626     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34627
34628   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
34629     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
34630
34631   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
34632
34633     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34634
34635   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
34636
34637     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34638
34639   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
34640     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
34641
34642   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
34643     const int)
34644     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34645
34646   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
34647     int)
34648     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34649
34650   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
34651     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
34652
34653   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
34654     int)
34655     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34656
34657   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
34658     int)
34659     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34660
34661   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
34662     int)
34663     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34664
34665   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
34666     int)
34667     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34668
34669   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
34670     const int)
34671     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
34672
34673   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
34674     int)
34675     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
34676
34677   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
34678     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
34679
34680   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
34681     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
34682
34683   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
34684     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
34685
34686   * int32x2x2_t vld2_dup_s32 (const int32_t *)
34687     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
34688
34689   * int16x4x2_t vld2_dup_s16 (const int16_t *)
34690     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
34691
34692   * int8x8x2_t vld2_dup_s8 (const int8_t *)
34693     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
34694
34695   * float32x2x2_t vld2_dup_f32 (const float32_t *)
34696     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
34697
34698   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
34699     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
34700
34701   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
34702     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
34703
34704   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
34705     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34706
34707   * int64x1x2_t vld2_dup_s64 (const int64_t *)
34708     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
34709
347106.56.3.78 Element/structure stores, VST2 variants
34711.................................................
34712
34713   * void vst2_u32 (uint32_t *, uint32x2x2_t)
34714     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34715
34716   * void vst2_u16 (uint16_t *, uint16x4x2_t)
34717     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34718
34719   * void vst2_u8 (uint8_t *, uint8x8x2_t)
34720     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34721
34722   * void vst2_s32 (int32_t *, int32x2x2_t)
34723     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34724
34725   * void vst2_s16 (int16_t *, int16x4x2_t)
34726     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34727
34728   * void vst2_s8 (int8_t *, int8x8x2_t)
34729     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34730
34731   * void vst2_f32 (float32_t *, float32x2x2_t)
34732     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34733
34734   * void vst2_p16 (poly16_t *, poly16x4x2_t)
34735     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34736
34737   * void vst2_p8 (poly8_t *, poly8x8x2_t)
34738     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34739
34740   * void vst2_u64 (uint64_t *, uint64x1x2_t)
34741     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
34742
34743   * void vst2_s64 (int64_t *, int64x1x2_t)
34744     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
34745
34746   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
34747     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34748
34749   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
34750     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34751
34752   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
34753     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34754
34755   * void vst2q_s32 (int32_t *, int32x4x2_t)
34756     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34757
34758   * void vst2q_s16 (int16_t *, int16x8x2_t)
34759     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34760
34761   * void vst2q_s8 (int8_t *, int8x16x2_t)
34762     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34763
34764   * void vst2q_f32 (float32_t *, float32x4x2_t)
34765     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
34766
34767   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
34768     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
34769
34770   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
34771     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
34772
34773   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
34774     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34775
34776   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
34777     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34778
34779   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
34780     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
34781
34782   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
34783     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34784
34785   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
34786     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34787
34788   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
34789     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
34790
34791   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
34792     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34793
34794   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
34795     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34796
34797   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
34798     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
34799
34800   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
34801     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34802
34803   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
34804     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34805
34806   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
34807     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34808
34809   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
34810     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34811
34812   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
34813     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
34814
34815   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
34816     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
34817
348186.56.3.79 Element/structure loads, VLD3 variants
34819................................................
34820
34821   * uint32x2x3_t vld3_u32 (const uint32_t *)
34822     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34823
34824   * uint16x4x3_t vld3_u16 (const uint16_t *)
34825     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34826
34827   * uint8x8x3_t vld3_u8 (const uint8_t *)
34828     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34829
34830   * int32x2x3_t vld3_s32 (const int32_t *)
34831     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34832
34833   * int16x4x3_t vld3_s16 (const int16_t *)
34834     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34835
34836   * int8x8x3_t vld3_s8 (const int8_t *)
34837     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34838
34839   * float32x2x3_t vld3_f32 (const float32_t *)
34840     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34841
34842   * poly16x4x3_t vld3_p16 (const poly16_t *)
34843     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34844
34845   * poly8x8x3_t vld3_p8 (const poly8_t *)
34846     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34847
34848   * uint64x1x3_t vld3_u64 (const uint64_t *)
34849     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
34850
34851   * int64x1x3_t vld3_s64 (const int64_t *)
34852     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
34853
34854   * uint32x4x3_t vld3q_u32 (const uint32_t *)
34855     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34856
34857   * uint16x8x3_t vld3q_u16 (const uint16_t *)
34858     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34859
34860   * uint8x16x3_t vld3q_u8 (const uint8_t *)
34861     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34862
34863   * int32x4x3_t vld3q_s32 (const int32_t *)
34864     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34865
34866   * int16x8x3_t vld3q_s16 (const int16_t *)
34867     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34868
34869   * int8x16x3_t vld3q_s8 (const int8_t *)
34870     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34871
34872   * float32x4x3_t vld3q_f32 (const float32_t *)
34873     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
34874
34875   * poly16x8x3_t vld3q_p16 (const poly16_t *)
34876     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
34877
34878   * poly8x16x3_t vld3q_p8 (const poly8_t *)
34879     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
34880
34881   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
34882     int)
34883     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34884     [R0]'
34885
34886   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
34887     int)
34888     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34889     [R0]'
34890
34891   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
34892     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
34893     [R0]'
34894
34895   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
34896
34897     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34898     [R0]'
34899
34900   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
34901
34902     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34903     [R0]'
34904
34905   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
34906     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
34907     [R0]'
34908
34909   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
34910     const int)
34911     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34912     [R0]'
34913
34914   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
34915     int)
34916     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34917     [R0]'
34918
34919   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
34920     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
34921     [R0]'
34922
34923   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
34924     int)
34925     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34926     [R0]'
34927
34928   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
34929     int)
34930     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34931     [R0]'
34932
34933   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
34934     int)
34935     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34936     [R0]'
34937
34938   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
34939     int)
34940     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34941     [R0]'
34942
34943   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
34944     const int)
34945     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
34946     [R0]'
34947
34948   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
34949     int)
34950     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
34951     [R0]'
34952
34953   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
34954     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
34955     [R0]'
34956
34957   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
34958     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
34959     [R0]'
34960
34961   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
34962     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
34963     [R0]'
34964
34965   * int32x2x3_t vld3_dup_s32 (const int32_t *)
34966     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
34967     [R0]'
34968
34969   * int16x4x3_t vld3_dup_s16 (const int16_t *)
34970     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
34971     [R0]'
34972
34973   * int8x8x3_t vld3_dup_s8 (const int8_t *)
34974     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
34975     [R0]'
34976
34977   * float32x2x3_t vld3_dup_f32 (const float32_t *)
34978     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
34979     [R0]'
34980
34981   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
34982     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
34983     [R0]'
34984
34985   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
34986     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
34987     [R0]'
34988
34989   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
34990     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
34991
34992   * int64x1x3_t vld3_dup_s64 (const int64_t *)
34993     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
34994
349956.56.3.80 Element/structure stores, VST3 variants
34996.................................................
34997
34998   * void vst3_u32 (uint32_t *, uint32x2x3_t)
34999     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
35000
35001   * void vst3_u16 (uint16_t *, uint16x4x3_t)
35002     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
35003
35004   * void vst3_u8 (uint8_t *, uint8x8x3_t)
35005     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
35006
35007   * void vst3_s32 (int32_t *, int32x2x3_t)
35008     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
35009
35010   * void vst3_s16 (int16_t *, int16x4x3_t)
35011     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
35012
35013   * void vst3_s8 (int8_t *, int8x8x3_t)
35014     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
35015
35016   * void vst3_f32 (float32_t *, float32x2x3_t)
35017     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
35018
35019   * void vst3_p16 (poly16_t *, poly16x4x3_t)
35020     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
35021
35022   * void vst3_p8 (poly8_t *, poly8x8x3_t)
35023     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
35024
35025   * void vst3_u64 (uint64_t *, uint64x1x3_t)
35026     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
35027
35028   * void vst3_s64 (int64_t *, int64x1x3_t)
35029     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
35030
35031   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
35032     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
35033
35034   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
35035     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
35036
35037   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
35038     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
35039
35040   * void vst3q_s32 (int32_t *, int32x4x3_t)
35041     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
35042
35043   * void vst3q_s16 (int16_t *, int16x8x3_t)
35044     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
35045
35046   * void vst3q_s8 (int8_t *, int8x16x3_t)
35047     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
35048
35049   * void vst3q_f32 (float32_t *, float32x4x3_t)
35050     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
35051
35052   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
35053     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
35054
35055   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
35056     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
35057
35058   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
35059     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35060     [R0]'
35061
35062   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
35063     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35064     [R0]'
35065
35066   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
35067     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
35068     [R0]'
35069
35070   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
35071     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35072     [R0]'
35073
35074   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
35075     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35076     [R0]'
35077
35078   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
35079     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
35080     [R0]'
35081
35082   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
35083     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35084     [R0]'
35085
35086   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
35087     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35088     [R0]'
35089
35090   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
35091     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
35092     [R0]'
35093
35094   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
35095     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35096     [R0]'
35097
35098   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
35099     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35100     [R0]'
35101
35102   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
35103     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35104     [R0]'
35105
35106   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
35107     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35108     [R0]'
35109
35110   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
35111     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
35112     [R0]'
35113
35114   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
35115     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
35116     [R0]'
35117
351186.56.3.81 Element/structure loads, VLD4 variants
35119................................................
35120
35121   * uint32x2x4_t vld4_u32 (const uint32_t *)
35122     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35123
35124   * uint16x4x4_t vld4_u16 (const uint16_t *)
35125     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35126
35127   * uint8x8x4_t vld4_u8 (const uint8_t *)
35128     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35129
35130   * int32x2x4_t vld4_s32 (const int32_t *)
35131     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35132
35133   * int16x4x4_t vld4_s16 (const int16_t *)
35134     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35135
35136   * int8x8x4_t vld4_s8 (const int8_t *)
35137     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35138
35139   * float32x2x4_t vld4_f32 (const float32_t *)
35140     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35141
35142   * poly16x4x4_t vld4_p16 (const poly16_t *)
35143     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35144
35145   * poly8x8x4_t vld4_p8 (const poly8_t *)
35146     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35147
35148   * uint64x1x4_t vld4_u64 (const uint64_t *)
35149     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
35150
35151   * int64x1x4_t vld4_s64 (const int64_t *)
35152     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
35153
35154   * uint32x4x4_t vld4q_u32 (const uint32_t *)
35155     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35156
35157   * uint16x8x4_t vld4q_u16 (const uint16_t *)
35158     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35159
35160   * uint8x16x4_t vld4q_u8 (const uint8_t *)
35161     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35162
35163   * int32x4x4_t vld4q_s32 (const int32_t *)
35164     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35165
35166   * int16x8x4_t vld4q_s16 (const int16_t *)
35167     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35168
35169   * int8x16x4_t vld4q_s8 (const int8_t *)
35170     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35171
35172   * float32x4x4_t vld4q_f32 (const float32_t *)
35173     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
35174
35175   * poly16x8x4_t vld4q_p16 (const poly16_t *)
35176     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
35177
35178   * poly8x16x4_t vld4q_p8 (const poly8_t *)
35179     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
35180
35181   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
35182     int)
35183     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35184     D3[0]}, [R0]'
35185
35186   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
35187     int)
35188     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35189     D3[0]}, [R0]'
35190
35191   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
35192     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
35193     D3[0]}, [R0]'
35194
35195   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
35196
35197     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35198     D3[0]}, [R0]'
35199
35200   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
35201
35202     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35203     D3[0]}, [R0]'
35204
35205   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
35206     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
35207     D3[0]}, [R0]'
35208
35209   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
35210     const int)
35211     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35212     D3[0]}, [R0]'
35213
35214   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
35215     int)
35216     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35217     D3[0]}, [R0]'
35218
35219   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
35220     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
35221     D3[0]}, [R0]'
35222
35223   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
35224     int)
35225     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35226     D3[0]}, [R0]'
35227
35228   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
35229     int)
35230     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35231     D3[0]}, [R0]'
35232
35233   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
35234     int)
35235     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35236     D3[0]}, [R0]'
35237
35238   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
35239     int)
35240     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35241     D3[0]}, [R0]'
35242
35243   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
35244     const int)
35245     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
35246     D3[0]}, [R0]'
35247
35248   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
35249     int)
35250     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
35251     D3[0]}, [R0]'
35252
35253   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
35254     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
35255     D3[]}, [R0]'
35256
35257   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
35258     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
35259     D3[]}, [R0]'
35260
35261   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
35262     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
35263     D3[]}, [R0]'
35264
35265   * int32x2x4_t vld4_dup_s32 (const int32_t *)
35266     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
35267     D3[]}, [R0]'
35268
35269   * int16x4x4_t vld4_dup_s16 (const int16_t *)
35270     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
35271     D3[]}, [R0]'
35272
35273   * int8x8x4_t vld4_dup_s8 (const int8_t *)
35274     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
35275     D3[]}, [R0]'
35276
35277   * float32x2x4_t vld4_dup_f32 (const float32_t *)
35278     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
35279     D3[]}, [R0]'
35280
35281   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
35282     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
35283     D3[]}, [R0]'
35284
35285   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
35286     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
35287     D3[]}, [R0]'
35288
35289   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
35290     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
35291
35292   * int64x1x4_t vld4_dup_s64 (const int64_t *)
35293     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
35294
352956.56.3.82 Element/structure stores, VST4 variants
35296.................................................
35297
35298   * void vst4_u32 (uint32_t *, uint32x2x4_t)
35299     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35300
35301   * void vst4_u16 (uint16_t *, uint16x4x4_t)
35302     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35303
35304   * void vst4_u8 (uint8_t *, uint8x8x4_t)
35305     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35306
35307   * void vst4_s32 (int32_t *, int32x2x4_t)
35308     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35309
35310   * void vst4_s16 (int16_t *, int16x4x4_t)
35311     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35312
35313   * void vst4_s8 (int8_t *, int8x8x4_t)
35314     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35315
35316   * void vst4_f32 (float32_t *, float32x2x4_t)
35317     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35318
35319   * void vst4_p16 (poly16_t *, poly16x4x4_t)
35320     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35321
35322   * void vst4_p8 (poly8_t *, poly8x8x4_t)
35323     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35324
35325   * void vst4_u64 (uint64_t *, uint64x1x4_t)
35326     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
35327
35328   * void vst4_s64 (int64_t *, int64x1x4_t)
35329     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
35330
35331   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
35332     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35333
35334   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
35335     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35336
35337   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
35338     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35339
35340   * void vst4q_s32 (int32_t *, int32x4x4_t)
35341     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35342
35343   * void vst4q_s16 (int16_t *, int16x8x4_t)
35344     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35345
35346   * void vst4q_s8 (int8_t *, int8x16x4_t)
35347     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35348
35349   * void vst4q_f32 (float32_t *, float32x4x4_t)
35350     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
35351
35352   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
35353     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
35354
35355   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
35356     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
35357
35358   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
35359     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35360     D3[0]}, [R0]'
35361
35362   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
35363     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35364     D3[0]}, [R0]'
35365
35366   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
35367     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
35368     D3[0]}, [R0]'
35369
35370   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
35371     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35372     D3[0]}, [R0]'
35373
35374   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
35375     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35376     D3[0]}, [R0]'
35377
35378   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
35379     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
35380     D3[0]}, [R0]'
35381
35382   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
35383     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35384     D3[0]}, [R0]'
35385
35386   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
35387     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35388     D3[0]}, [R0]'
35389
35390   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
35391     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
35392     D3[0]}, [R0]'
35393
35394   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
35395     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35396     D3[0]}, [R0]'
35397
35398   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
35399     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35400     D3[0]}, [R0]'
35401
35402   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
35403     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35404     D3[0]}, [R0]'
35405
35406   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
35407     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35408     D3[0]}, [R0]'
35409
35410   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
35411     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
35412     D3[0]}, [R0]'
35413
35414   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
35415     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
35416     D3[0]}, [R0]'
35417
354186.56.3.83 Logical operations (AND)
35419..................................
35420
35421   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
35422     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35423
35424   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
35425     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35426
35427   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
35428     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35429
35430   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
35431     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35432
35433   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
35434     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35435
35436   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
35437     _Form of expected instruction(s):_ 'vand D0, D0, D0'
35438
35439   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
35440
35441   * int64x1_t vand_s64 (int64x1_t, int64x1_t)
35442
35443   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
35444     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35445
35446   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
35447     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35448
35449   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
35450     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35451
35452   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
35453     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35454
35455   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
35456     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35457
35458   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
35459     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35460
35461   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
35462     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35463
35464   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
35465     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
35466
354676.56.3.84 Logical operations (OR)
35468.................................
35469
35470   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
35471     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35472
35473   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
35474     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35475
35476   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
35477     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35478
35479   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
35480     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35481
35482   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
35483     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35484
35485   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
35486     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
35487
35488   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
35489
35490   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
35491
35492   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
35493     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35494
35495   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
35496     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35497
35498   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
35499     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35500
35501   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
35502     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35503
35504   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
35505     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35506
35507   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
35508     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35509
35510   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
35511     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35512
35513   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
35514     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
35515
355166.56.3.85 Logical operations (exclusive OR)
35517...........................................
35518
35519   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
35520     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35521
35522   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
35523     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35524
35525   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
35526     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35527
35528   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
35529     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35530
35531   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
35532     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35533
35534   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
35535     _Form of expected instruction(s):_ 'veor D0, D0, D0'
35536
35537   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
35538
35539   * int64x1_t veor_s64 (int64x1_t, int64x1_t)
35540
35541   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
35542     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35543
35544   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
35545     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35546
35547   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
35548     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35549
35550   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
35551     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35552
35553   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
35554     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35555
35556   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
35557     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35558
35559   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
35560     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35561
35562   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
35563     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
35564
355656.56.3.86 Logical operations (AND-NOT)
35566......................................
35567
35568   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
35569     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35570
35571   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
35572     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35573
35574   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
35575     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35576
35577   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
35578     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35579
35580   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
35581     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35582
35583   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
35584     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
35585
35586   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
35587
35588   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
35589
35590   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
35591     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35592
35593   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
35594     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35595
35596   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
35597     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35598
35599   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
35600     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35601
35602   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
35603     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35604
35605   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
35606     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35607
35608   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
35609     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35610
35611   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
35612     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
35613
356146.56.3.87 Logical operations (OR-NOT)
35615.....................................
35616
35617   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
35618     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35619
35620   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
35621     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35622
35623   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
35624     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35625
35626   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
35627     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35628
35629   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
35630     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35631
35632   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
35633     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
35634
35635   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
35636
35637   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
35638
35639   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
35640     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35641
35642   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
35643     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35644
35645   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
35646     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35647
35648   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
35649     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35650
35651   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
35652     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35653
35654   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
35655     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35656
35657   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
35658     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35659
35660   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
35661     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
35662
356636.56.3.88 Reinterpret casts
35664...........................
35665
35666   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
35667
35668   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
35669
35670   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
35671
35672   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
35673
35674   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
35675
35676   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
35677
35678   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
35679
35680   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
35681
35682   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
35683
35684   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
35685
35686   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
35687
35688   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
35689
35690   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
35691
35692   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
35693
35694   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
35695
35696   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
35697
35698   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
35699
35700   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
35701
35702   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
35703
35704   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
35705
35706   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
35707
35708   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
35709
35710   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
35711
35712   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
35713
35714   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
35715
35716   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
35717
35718   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
35719
35720   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
35721
35722   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
35723
35724   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
35725
35726   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
35727
35728   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
35729
35730   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
35731
35732   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
35733
35734   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
35735
35736   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
35737
35738   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
35739
35740   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
35741
35742   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
35743
35744   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
35745
35746   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
35747
35748   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
35749
35750   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
35751
35752   * float32x2_t vreinterpret_f32_s32 (int32x2_t)
35753
35754   * float32x2_t vreinterpret_f32_s16 (int16x4_t)
35755
35756   * float32x2_t vreinterpret_f32_s8 (int8x8_t)
35757
35758   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
35759
35760   * float32x2_t vreinterpret_f32_s64 (int64x1_t)
35761
35762   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
35763
35764   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
35765
35766   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
35767
35768   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
35769
35770   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
35771
35772   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
35773
35774   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
35775
35776   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
35777
35778   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
35779
35780   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
35781
35782   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
35783
35784   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
35785
35786   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
35787
35788   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
35789
35790   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
35791
35792   * int64x1_t vreinterpret_s64_s32 (int32x2_t)
35793
35794   * int64x1_t vreinterpret_s64_s16 (int16x4_t)
35795
35796   * int64x1_t vreinterpret_s64_s8 (int8x8_t)
35797
35798   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
35799
35800   * int64x1_t vreinterpret_s64_f32 (float32x2_t)
35801
35802   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
35803
35804   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
35805
35806   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
35807
35808   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
35809
35810   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
35811
35812   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
35813
35814   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
35815
35816   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
35817
35818   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
35819
35820   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
35821
35822   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
35823
35824   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
35825
35826   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
35827
35828   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
35829
35830   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
35831
35832   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
35833
35834   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
35835
35836   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
35837
35838   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
35839
35840   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
35841
35842   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
35843
35844   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
35845
35846   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
35847
35848   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
35849
35850   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
35851
35852   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
35853
35854   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
35855
35856   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
35857
35858   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
35859
35860   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
35861
35862   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
35863
35864   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
35865
35866   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
35867
35868   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
35869
35870   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
35871
35872   * int8x8_t vreinterpret_s8_s32 (int32x2_t)
35873
35874   * int8x8_t vreinterpret_s8_s16 (int16x4_t)
35875
35876   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
35877
35878   * int8x8_t vreinterpret_s8_s64 (int64x1_t)
35879
35880   * int8x8_t vreinterpret_s8_f32 (float32x2_t)
35881
35882   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
35883
35884   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
35885
35886   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
35887
35888   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
35889
35890   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
35891
35892   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
35893
35894   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
35895
35896   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
35897
35898   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
35899
35900   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
35901
35902   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
35903
35904   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
35905
35906   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
35907
35908   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
35909
35910   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
35911
35912   * int16x4_t vreinterpret_s16_s32 (int32x2_t)
35913
35914   * int16x4_t vreinterpret_s16_s8 (int8x8_t)
35915
35916   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
35917
35918   * int16x4_t vreinterpret_s16_s64 (int64x1_t)
35919
35920   * int16x4_t vreinterpret_s16_f32 (float32x2_t)
35921
35922   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
35923
35924   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
35925
35926   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
35927
35928   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
35929
35930   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
35931
35932   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
35933
35934   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
35935
35936   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
35937
35938   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
35939
35940   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
35941
35942   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
35943
35944   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
35945
35946   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
35947
35948   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
35949
35950   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
35951
35952   * int32x2_t vreinterpret_s32_s16 (int16x4_t)
35953
35954   * int32x2_t vreinterpret_s32_s8 (int8x8_t)
35955
35956   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
35957
35958   * int32x2_t vreinterpret_s32_s64 (int64x1_t)
35959
35960   * int32x2_t vreinterpret_s32_f32 (float32x2_t)
35961
35962   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
35963
35964   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
35965
35966   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
35967
35968   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
35969
35970   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
35971
35972   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
35973
35974   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
35975
35976   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
35977
35978   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
35979
35980   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
35981
35982   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
35983
35984   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
35985
35986   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
35987
35988   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
35989
35990   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
35991
35992   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
35993
35994   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
35995
35996   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
35997
35998   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
35999
36000   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
36001
36002   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
36003
36004   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
36005
36006   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
36007
36008   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
36009
36010   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
36011
36012   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
36013
36014   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
36015
36016   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
36017
36018   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
36019
36020   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
36021
36022   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
36023
36024   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
36025
36026   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
36027
36028   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
36029
36030   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
36031
36032   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
36033
36034   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
36035
36036   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
36037
36038   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
36039
36040   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
36041
36042   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
36043
36044   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
36045
36046   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
36047
36048   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
36049
36050   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
36051
36052   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
36053
36054   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
36055
36056   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
36057
36058   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
36059
36060   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
36061
36062   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
36063
36064   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
36065
36066   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
36067
36068   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
36069
36070   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
36071
36072   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
36073
36074   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
36075
36076   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
36077
36078   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
36079
36080   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
36081
36082   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
36083
36084   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
36085
36086   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
36087
36088   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
36089
36090   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
36091
36092   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
36093
36094   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
36095
36096   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
36097
36098   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
36099
36100   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
36101
36102   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
36103
36104   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
36105
36106
36107File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
36108
361096.56.4 AVR Built-in Functions
36110-----------------------------
36111
36112For each built-in function for AVR, there is an equally named, uppercase
36113built-in macro defined.  That way users can easily query if or if not a
36114specific built-in is implemented or not.  For example, if
36115'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
36116defined to '1' and undefined otherwise.
36117
36118 The following built-in functions map to the respective machine
36119instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul',
36120'fmuls' resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
36121library call if no hardware multiplier is available.
36122
36123     void __builtin_avr_nop (void)
36124     void __builtin_avr_sei (void)
36125     void __builtin_avr_cli (void)
36126     void __builtin_avr_sleep (void)
36127     void __builtin_avr_wdr (void)
36128     unsigned char __builtin_avr_swap (unsigned char)
36129     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
36130     int __builtin_avr_fmuls (char, char)
36131     int __builtin_avr_fmulsu (char, unsigned char)
36132
36133 In order to delay execution for a specific number of cycles, GCC
36134implements
36135     void __builtin_avr_delay_cycles (unsigned long ticks)
36136
36137'ticks' is the number of ticks to delay execution.  Note that this
36138built-in does not take into account the effect of interrupts that might
36139increase delay time.  'ticks' must be a compile-time integer constant;
36140delays with a variable number of cycles are not supported.
36141
36142     char __builtin_avr_flash_segment (const __memx void*)
36143
36144This built-in takes a byte address to the 24-bit *note address space:
36145AVR Named Address Spaces. '__memx' and returns the number of the flash
36146segment (the 64 KiB chunk) where the address points to.  Counting starts
36147at '0'.  If the address does not point to flash memory, return '-1'.
36148
36149     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
36150
36151Insert bits from BITS into VAL and return the resulting value.  The
36152nibbles of MAP determine how the insertion is performed: Let X be the
36153N-th nibble of MAP
36154  1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
36155
36156  2. If X is in the range 0...7, then the N-th result bit is set to the
36157     X-th bit of BITS
36158
36159  3. If X is in the range 8...'0xe', then the N-th result bit is
36160     undefined.
36161
36162One typical use case for this built-in is adjusting input and output
36163values to non-contiguous port layouts.  Some examples:
36164
36165     // same as val, bits is unused
36166     __builtin_avr_insert_bits (0xffffffff, bits, val)
36167
36168     // same as bits, val is unused
36169     __builtin_avr_insert_bits (0x76543210, bits, val)
36170
36171     // same as rotating bits by 4
36172     __builtin_avr_insert_bits (0x32107654, bits, 0)
36173
36174     // high nibble of result is the high nibble of val
36175     // low nibble of result is the low nibble of bits
36176     __builtin_avr_insert_bits (0xffff3210, bits, val)
36177
36178     // reverse the bit order of bits
36179     __builtin_avr_insert_bits (0x01234567, bits, 0)
36180
36181
36182File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
36183
361846.56.5 Blackfin Built-in Functions
36185----------------------------------
36186
36187Currently, there are two Blackfin-specific built-in functions.  These
36188are used for generating 'CSYNC' and 'SSYNC' machine insns without using
36189inline assembly; by using these built-in functions the compiler can
36190automatically add workarounds for hardware errata involving these
36191instructions.  These functions are named as follows:
36192
36193     void __builtin_bfin_csync (void)
36194     void __builtin_bfin_ssync (void)
36195
36196
36197File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
36198
361996.56.6 FR-V Built-in Functions
36200------------------------------
36201
36202GCC provides many FR-V-specific built-in functions.  In general, these
36203functions are intended to be compatible with those described by 'FR-V
36204Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
36205two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
36206pass 128-bit values by pointer rather than by value.
36207
36208 Most of the functions are named after specific FR-V instructions.  Such
36209functions are said to be "directly mapped" and are summarized here in
36210tabular form.
36211
36212* Menu:
36213
36214* Argument Types::
36215* Directly-mapped Integer Functions::
36216* Directly-mapped Media Functions::
36217* Raw read/write Functions::
36218* Other Built-in Functions::
36219
36220
36221File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36222
362236.56.6.1 Argument Types
36224.......................
36225
36226The arguments to the built-in functions can be divided into three
36227groups: register numbers, compile-time constants and run-time values.
36228In order to make this classification clear at a glance, the arguments
36229and return values are given the following pseudo types:
36230
36231Pseudo type    Real C type            Constant?   Description
36232'uh'           'unsigned short'       No          an unsigned halfword
36233'uw1'          'unsigned int'         No          an unsigned word
36234'sw1'          'int'                  No          a signed word
36235'uw2'          'unsigned long long'   No          an unsigned doubleword
36236'sw2'          'long long'            No          a signed doubleword
36237'const'        'int'                  Yes         an integer constant
36238'acc'          'int'                  Yes         an ACC register number
36239'iacc'         'int'                  Yes         an IACC register number
36240
36241 These pseudo types are not defined by GCC, they are simply a notational
36242convenience used in this manual.
36243
36244 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
36245run time.  They correspond to register operands in the underlying FR-V
36246instructions.
36247
36248 'const' arguments represent immediate operands in the underlying FR-V
36249instructions.  They must be compile-time constants.
36250
36251 'acc' arguments are evaluated at compile time and specify the number of
36252an accumulator register.  For example, an 'acc' argument of 2 selects
36253the ACC2 register.
36254
36255 'iacc' arguments are similar to 'acc' arguments but specify the number
36256of an IACC register.  See *note Other Built-in Functions:: for more
36257details.
36258
36259
36260File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
36261
362626.56.6.2 Directly-mapped Integer Functions
36263..........................................
36264
36265The functions listed below map directly to FR-V I-type instructions.
36266
36267Function prototype               Example usage           Assembly output
36268'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
36269'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
36270'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
36271'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
36272'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
36273'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
36274'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
36275'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
36276'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
36277'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
36278
36279
36280File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36281
362826.56.6.3 Directly-mapped Media Functions
36283........................................
36284
36285The functions listed below map directly to FR-V M-type instructions.
36286
36287Function prototype               Example usage           Assembly output
36288'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
36289'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
36290'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
36291                                 B)'
36292'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
36293                                 B)'
36294'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
36295'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
36296'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
36297'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
36298'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
36299'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
36300'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
36301'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
36302'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
36303'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
36304'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
36305'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
36306sw1)'
36307'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
36308uw1)'
36309'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
36310sw1)'
36311'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
36312uw1)'
36313'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
36314'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
36315'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
36316'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
36317'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
36318                                 B)'                     A,#B,C'
36319'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
36320                                 B)'
36321'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
36322                                 B)'                     A,#B,C'
36323'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
36324'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
36325uw2)'
36326'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
36327                                 B)'                     A,#B,C'
36328'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
36329                                 B)'                     A,#B,C'
36330'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
36331                                 B)'                     A,#B,C'
36332'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
36333'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
36334                                 A)'
36335'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
36336                                 A)'
36337'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
36338                                 A)'
36339'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
36340                                 A)'
36341'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
36342'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
36343sw1)'
36344'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
36345uw1)'
36346'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
36347sw1)'
36348'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
36349uw1)'
36350'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
36351sw1)'
36352'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
36353uw1)'
36354'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
36355sw1)'
36356'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
36357uw1)'
36358'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
36359'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
36360'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
36361'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
36362                                 B)'                     A,B,C'
36363'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
36364                                 B)'                     A,B,C'
36365'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
36366sw2)'
36367'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
36368uw2)'
36369'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
36370sw2)'
36371'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
36372uw2)'
36373'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
36374                                 B)'                     A,B,C'
36375'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
36376                                 B)'
36377'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
36378sw2)'
36379'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
36380uw2)'
36381'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
36382sw2)'                            B)'                     A,B,C'
36383'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
36384sw2)'
36385'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
36386uw2)'
36387'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
36388sw2)'                            B)'                     A,B,C'
36389'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
36390uw2)'                            B)'                     A,B,C'
36391'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
36392                                 B)'
36393'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
36394                                 B)'
36395'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
36396                                 B)'
36397'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
36398                                 B)'                     A,B,C'
36399'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
36400                                 B)'                     A,B,C'
36401'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
36402sw2)'                            B)'                     A,B,C'
36403'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
36404sw2)'                            B)'                     A,B,C'
36405'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
36406'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
36407'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
36408'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
36409'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
36410'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
36411'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
36412'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
36413'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
36414'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
36415'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
36416                                 B)'
36417'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
36418                                 B)'
36419'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
36420'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
36421'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
36422'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
36423'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
36424'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
36425
36426
36427File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
36428
364296.56.6.4 Raw read/write Functions
36430.................................
36431
36432This sections describes built-in functions related to read and write
36433instructions to access memory.  These functions generate 'membar'
36434instructions to flush the I/O load and stores where appropriate, as
36435described in Fujitsu's manual described above.
36436
36437'unsigned char __builtin_read8 (void *DATA)'
36438'unsigned short __builtin_read16 (void *DATA)'
36439'unsigned long __builtin_read32 (void *DATA)'
36440'unsigned long long __builtin_read64 (void *DATA)'
36441
36442'void __builtin_write8 (void *DATA, unsigned char DATUM)'
36443'void __builtin_write16 (void *DATA, unsigned short DATUM)'
36444'void __builtin_write32 (void *DATA, unsigned long DATUM)'
36445'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
36446
36447
36448File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
36449
364506.56.6.5 Other Built-in Functions
36451.................................
36452
36453This section describes built-in functions that are not named after a
36454specific FR-V instruction.
36455
36456'sw2 __IACCreadll (iacc REG)'
36457     Return the full 64-bit value of IACC0.  The REG argument is
36458     reserved for future expansion and must be 0.
36459
36460'sw1 __IACCreadl (iacc REG)'
36461     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
36462     Other values of REG are rejected as invalid.
36463
36464'void __IACCsetll (iacc REG, sw2 X)'
36465     Set the full 64-bit value of IACC0 to X.  The REG argument is
36466     reserved for future expansion and must be 0.
36467
36468'void __IACCsetl (iacc REG, sw1 X)'
36469     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
36470     values of REG are rejected as invalid.
36471
36472'void __data_prefetch0 (const void *X)'
36473     Use the 'dcpl' instruction to load the contents of address X into
36474     the data cache.
36475
36476'void __data_prefetch (const void *X)'
36477     Use the 'nldub' instruction to load the contents of address X into
36478     the data cache.  The instruction is issued in slot I1.
36479
36480
36481File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
36482
364836.56.7 X86 Built-in Functions
36484-----------------------------
36485
36486These built-in functions are available for the i386 and x86-64 family of
36487computers, depending on the command-line switches used.
36488
36489 If you specify command-line switches such as '-msse', the compiler
36490could use the extended instruction sets even if the built-ins are not
36491used explicitly in the program.  For this reason, applications that
36492perform run-time CPU detection must compile separate files for each
36493supported architecture, using the appropriate flags.  In particular, the
36494file containing the CPU detection code should be compiled without these
36495options.
36496
36497 The following machine modes are available for use with MMX built-in
36498functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
36499integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
36500vector of eight 8-bit integers.  Some of the built-in functions operate
36501on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
36502mode.
36503
36504 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
36505of two 32-bit floating-point values.
36506
36507 If SSE extensions are enabled, 'V4SF' is used for a vector of four
3650832-bit floating-point values.  Some instructions use a vector of four
3650932-bit integers, these use 'V4SI'.  Finally, some instructions operate
36510on an entire vector register, interpreting it as a 128-bit integer,
36511these use mode 'TI'.
36512
36513 In 64-bit mode, the x86-64 family of processors uses additional
36514built-in functions for efficient use of 'TF' ('__float128') 128-bit
36515floating point and 'TC' 128-bit complex floating-point values.
36516
36517 The following floating-point built-in functions are available in 64-bit
36518mode.  All of them implement the function that is part of the name.
36519
36520     __float128 __builtin_fabsq (__float128)
36521     __float128 __builtin_copysignq (__float128, __float128)
36522
36523 The following built-in function is always available.
36524
36525'void __builtin_ia32_pause (void)'
36526     Generates the 'pause' machine instruction with a compiler memory
36527     barrier.
36528
36529 The following floating-point built-in functions are made available in
36530the 64-bit mode.
36531
36532'__float128 __builtin_infq (void)'
36533     Similar to '__builtin_inf', except the return type is '__float128'.
36534
36535'__float128 __builtin_huge_valq (void)'
36536     Similar to '__builtin_huge_val', except the return type is
36537     '__float128'.
36538
36539 The following built-in functions are always available and can be used
36540to check the target platform type.
36541
36542 -- Built-in Function: void __builtin_cpu_init (void)
36543     This function runs the CPU detection code to check the type of CPU
36544     and the features supported.  This built-in function needs to be
36545     invoked along with the built-in functions to check CPU type and
36546     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
36547     when used in a function that is executed before any constructors
36548     are called.  The CPU detection code is automatically executed in a
36549     very high priority constructor.
36550
36551     For example, this function has to be used in 'ifunc' resolvers that
36552     check for CPU type using the built-in functions '__builtin_cpu_is'
36553     and '__builtin_cpu_supports', or in constructors on targets that
36554     don't support constructor priority.
36555
36556          static void (*resolve_memcpy (void)) (void)
36557          {
36558            // ifunc resolvers fire before constructors, explicitly call the init
36559            // function.
36560            __builtin_cpu_init ();
36561            if (__builtin_cpu_supports ("ssse3"))
36562              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
36563            else
36564              return default_memcpy;
36565          }
36566
36567          void *memcpy (void *, const void *, size_t)
36568               __attribute__ ((ifunc ("resolve_memcpy")));
36569
36570 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
36571     This function returns a positive integer if the run-time CPU is of
36572     type CPUNAME and returns '0' otherwise.  The following CPU names
36573     can be detected:
36574
36575     'intel'
36576          Intel CPU.
36577
36578     'atom'
36579          Intel Atom CPU.
36580
36581     'core2'
36582          Intel Core 2 CPU.
36583
36584     'corei7'
36585          Intel Core i7 CPU.
36586
36587     'nehalem'
36588          Intel Core i7 Nehalem CPU.
36589
36590     'westmere'
36591          Intel Core i7 Westmere CPU.
36592
36593     'sandybridge'
36594          Intel Core i7 Sandy Bridge CPU.
36595
36596     'amd'
36597          AMD CPU.
36598
36599     'amdfam10h'
36600          AMD Family 10h CPU.
36601
36602     'barcelona'
36603          AMD Family 10h Barcelona CPU.
36604
36605     'shanghai'
36606          AMD Family 10h Shanghai CPU.
36607
36608     'istanbul'
36609          AMD Family 10h Istanbul CPU.
36610
36611     'btver1'
36612          AMD Family 14h CPU.
36613
36614     'amdfam15h'
36615          AMD Family 15h CPU.
36616
36617     'bdver1'
36618          AMD Family 15h Bulldozer version 1.
36619
36620     'bdver2'
36621          AMD Family 15h Bulldozer version 2.
36622
36623     'bdver3'
36624          AMD Family 15h Bulldozer version 3.
36625
36626     'btver2'
36627          AMD Family 16h CPU.
36628
36629     Here is an example:
36630          if (__builtin_cpu_is ("corei7"))
36631            {
36632               do_corei7 (); // Core i7 specific implementation.
36633            }
36634          else
36635            {
36636               do_generic (); // Generic implementation.
36637            }
36638
36639 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
36640     This function returns a positive integer if the run-time CPU
36641     supports FEATURE and returns '0' otherwise.  The following features
36642     can be detected:
36643
36644     'cmov'
36645          CMOV instruction.
36646     'mmx'
36647          MMX instructions.
36648     'popcnt'
36649          POPCNT instruction.
36650     'sse'
36651          SSE instructions.
36652     'sse2'
36653          SSE2 instructions.
36654     'sse3'
36655          SSE3 instructions.
36656     'ssse3'
36657          SSSE3 instructions.
36658     'sse4.1'
36659          SSE4.1 instructions.
36660     'sse4.2'
36661          SSE4.2 instructions.
36662     'avx'
36663          AVX instructions.
36664     'avx2'
36665          AVX2 instructions.
36666
36667     Here is an example:
36668          if (__builtin_cpu_supports ("popcnt"))
36669            {
36670               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
36671            }
36672          else
36673            {
36674               count = generic_countbits (n); //generic implementation.
36675            }
36676
36677 The following built-in functions are made available by '-mmmx'.  All of
36678them generate the machine instruction that is part of the name.
36679
36680     v8qi __builtin_ia32_paddb (v8qi, v8qi)
36681     v4hi __builtin_ia32_paddw (v4hi, v4hi)
36682     v2si __builtin_ia32_paddd (v2si, v2si)
36683     v8qi __builtin_ia32_psubb (v8qi, v8qi)
36684     v4hi __builtin_ia32_psubw (v4hi, v4hi)
36685     v2si __builtin_ia32_psubd (v2si, v2si)
36686     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
36687     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
36688     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
36689     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
36690     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
36691     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
36692     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
36693     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
36694     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
36695     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
36696     di __builtin_ia32_pand (di, di)
36697     di __builtin_ia32_pandn (di,di)
36698     di __builtin_ia32_por (di, di)
36699     di __builtin_ia32_pxor (di, di)
36700     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
36701     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
36702     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
36703     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
36704     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
36705     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
36706     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
36707     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
36708     v2si __builtin_ia32_punpckhdq (v2si, v2si)
36709     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
36710     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
36711     v2si __builtin_ia32_punpckldq (v2si, v2si)
36712     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
36713     v4hi __builtin_ia32_packssdw (v2si, v2si)
36714     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
36715
36716     v4hi __builtin_ia32_psllw (v4hi, v4hi)
36717     v2si __builtin_ia32_pslld (v2si, v2si)
36718     v1di __builtin_ia32_psllq (v1di, v1di)
36719     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
36720     v2si __builtin_ia32_psrld (v2si, v2si)
36721     v1di __builtin_ia32_psrlq (v1di, v1di)
36722     v4hi __builtin_ia32_psraw (v4hi, v4hi)
36723     v2si __builtin_ia32_psrad (v2si, v2si)
36724     v4hi __builtin_ia32_psllwi (v4hi, int)
36725     v2si __builtin_ia32_pslldi (v2si, int)
36726     v1di __builtin_ia32_psllqi (v1di, int)
36727     v4hi __builtin_ia32_psrlwi (v4hi, int)
36728     v2si __builtin_ia32_psrldi (v2si, int)
36729     v1di __builtin_ia32_psrlqi (v1di, int)
36730     v4hi __builtin_ia32_psrawi (v4hi, int)
36731     v2si __builtin_ia32_psradi (v2si, int)
36732
36733
36734 The following built-in functions are made available either with
36735'-msse', or with a combination of '-m3dnow' and '-march=athlon'.  All of
36736them generate the machine instruction that is part of the name.
36737
36738     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
36739     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
36740     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
36741     v1di __builtin_ia32_psadbw (v8qi, v8qi)
36742     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
36743     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
36744     v8qi __builtin_ia32_pminub (v8qi, v8qi)
36745     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
36746     int __builtin_ia32_pextrw (v4hi, int)
36747     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
36748     int __builtin_ia32_pmovmskb (v8qi)
36749     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
36750     void __builtin_ia32_movntq (di *, di)
36751     void __builtin_ia32_sfence (void)
36752
36753 The following built-in functions are available when '-msse' is used.
36754All of them generate the machine instruction that is part of the name.
36755
36756     int __builtin_ia32_comieq (v4sf, v4sf)
36757     int __builtin_ia32_comineq (v4sf, v4sf)
36758     int __builtin_ia32_comilt (v4sf, v4sf)
36759     int __builtin_ia32_comile (v4sf, v4sf)
36760     int __builtin_ia32_comigt (v4sf, v4sf)
36761     int __builtin_ia32_comige (v4sf, v4sf)
36762     int __builtin_ia32_ucomieq (v4sf, v4sf)
36763     int __builtin_ia32_ucomineq (v4sf, v4sf)
36764     int __builtin_ia32_ucomilt (v4sf, v4sf)
36765     int __builtin_ia32_ucomile (v4sf, v4sf)
36766     int __builtin_ia32_ucomigt (v4sf, v4sf)
36767     int __builtin_ia32_ucomige (v4sf, v4sf)
36768     v4sf __builtin_ia32_addps (v4sf, v4sf)
36769     v4sf __builtin_ia32_subps (v4sf, v4sf)
36770     v4sf __builtin_ia32_mulps (v4sf, v4sf)
36771     v4sf __builtin_ia32_divps (v4sf, v4sf)
36772     v4sf __builtin_ia32_addss (v4sf, v4sf)
36773     v4sf __builtin_ia32_subss (v4sf, v4sf)
36774     v4sf __builtin_ia32_mulss (v4sf, v4sf)
36775     v4sf __builtin_ia32_divss (v4sf, v4sf)
36776     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
36777     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
36778     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
36779     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
36780     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
36781     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
36782     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
36783     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
36784     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
36785     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
36786     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
36787     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
36788     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
36789     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
36790     v4si __builtin_ia32_cmpless (v4sf, v4sf)
36791     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
36792     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
36793     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
36794     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
36795     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
36796     v4sf __builtin_ia32_maxps (v4sf, v4sf)
36797     v4sf __builtin_ia32_maxss (v4sf, v4sf)
36798     v4sf __builtin_ia32_minps (v4sf, v4sf)
36799     v4sf __builtin_ia32_minss (v4sf, v4sf)
36800     v4sf __builtin_ia32_andps (v4sf, v4sf)
36801     v4sf __builtin_ia32_andnps (v4sf, v4sf)
36802     v4sf __builtin_ia32_orps (v4sf, v4sf)
36803     v4sf __builtin_ia32_xorps (v4sf, v4sf)
36804     v4sf __builtin_ia32_movss (v4sf, v4sf)
36805     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
36806     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
36807     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
36808     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
36809     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
36810     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
36811     v2si __builtin_ia32_cvtps2pi (v4sf)
36812     int __builtin_ia32_cvtss2si (v4sf)
36813     v2si __builtin_ia32_cvttps2pi (v4sf)
36814     int __builtin_ia32_cvttss2si (v4sf)
36815     v4sf __builtin_ia32_rcpps (v4sf)
36816     v4sf __builtin_ia32_rsqrtps (v4sf)
36817     v4sf __builtin_ia32_sqrtps (v4sf)
36818     v4sf __builtin_ia32_rcpss (v4sf)
36819     v4sf __builtin_ia32_rsqrtss (v4sf)
36820     v4sf __builtin_ia32_sqrtss (v4sf)
36821     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
36822     void __builtin_ia32_movntps (float *, v4sf)
36823     int __builtin_ia32_movmskps (v4sf)
36824
36825 The following built-in functions are available when '-msse' is used.
36826
36827'v4sf __builtin_ia32_loadaps (float *)'
36828     Generates the 'movaps' machine instruction as a load from memory.
36829'void __builtin_ia32_storeaps (float *, v4sf)'
36830     Generates the 'movaps' machine instruction as a store to memory.
36831'v4sf __builtin_ia32_loadups (float *)'
36832     Generates the 'movups' machine instruction as a load from memory.
36833'void __builtin_ia32_storeups (float *, v4sf)'
36834     Generates the 'movups' machine instruction as a store to memory.
36835'v4sf __builtin_ia32_loadsss (float *)'
36836     Generates the 'movss' machine instruction as a load from memory.
36837'void __builtin_ia32_storess (float *, v4sf)'
36838     Generates the 'movss' machine instruction as a store to memory.
36839'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
36840     Generates the 'movhps' machine instruction as a load from memory.
36841'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
36842     Generates the 'movlps' machine instruction as a load from memory
36843'void __builtin_ia32_storehps (v2sf *, v4sf)'
36844     Generates the 'movhps' machine instruction as a store to memory.
36845'void __builtin_ia32_storelps (v2sf *, v4sf)'
36846     Generates the 'movlps' machine instruction as a store to memory.
36847
36848 The following built-in functions are available when '-msse2' is used.
36849All of them generate the machine instruction that is part of the name.
36850
36851     int __builtin_ia32_comisdeq (v2df, v2df)
36852     int __builtin_ia32_comisdlt (v2df, v2df)
36853     int __builtin_ia32_comisdle (v2df, v2df)
36854     int __builtin_ia32_comisdgt (v2df, v2df)
36855     int __builtin_ia32_comisdge (v2df, v2df)
36856     int __builtin_ia32_comisdneq (v2df, v2df)
36857     int __builtin_ia32_ucomisdeq (v2df, v2df)
36858     int __builtin_ia32_ucomisdlt (v2df, v2df)
36859     int __builtin_ia32_ucomisdle (v2df, v2df)
36860     int __builtin_ia32_ucomisdgt (v2df, v2df)
36861     int __builtin_ia32_ucomisdge (v2df, v2df)
36862     int __builtin_ia32_ucomisdneq (v2df, v2df)
36863     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
36864     v2df __builtin_ia32_cmpltpd (v2df, v2df)
36865     v2df __builtin_ia32_cmplepd (v2df, v2df)
36866     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
36867     v2df __builtin_ia32_cmpgepd (v2df, v2df)
36868     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
36869     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
36870     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
36871     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
36872     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
36873     v2df __builtin_ia32_cmpngepd (v2df, v2df)
36874     v2df __builtin_ia32_cmpordpd (v2df, v2df)
36875     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
36876     v2df __builtin_ia32_cmpltsd (v2df, v2df)
36877     v2df __builtin_ia32_cmplesd (v2df, v2df)
36878     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
36879     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
36880     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
36881     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
36882     v2df __builtin_ia32_cmpordsd (v2df, v2df)
36883     v2di __builtin_ia32_paddq (v2di, v2di)
36884     v2di __builtin_ia32_psubq (v2di, v2di)
36885     v2df __builtin_ia32_addpd (v2df, v2df)
36886     v2df __builtin_ia32_subpd (v2df, v2df)
36887     v2df __builtin_ia32_mulpd (v2df, v2df)
36888     v2df __builtin_ia32_divpd (v2df, v2df)
36889     v2df __builtin_ia32_addsd (v2df, v2df)
36890     v2df __builtin_ia32_subsd (v2df, v2df)
36891     v2df __builtin_ia32_mulsd (v2df, v2df)
36892     v2df __builtin_ia32_divsd (v2df, v2df)
36893     v2df __builtin_ia32_minpd (v2df, v2df)
36894     v2df __builtin_ia32_maxpd (v2df, v2df)
36895     v2df __builtin_ia32_minsd (v2df, v2df)
36896     v2df __builtin_ia32_maxsd (v2df, v2df)
36897     v2df __builtin_ia32_andpd (v2df, v2df)
36898     v2df __builtin_ia32_andnpd (v2df, v2df)
36899     v2df __builtin_ia32_orpd (v2df, v2df)
36900     v2df __builtin_ia32_xorpd (v2df, v2df)
36901     v2df __builtin_ia32_movsd (v2df, v2df)
36902     v2df __builtin_ia32_unpckhpd (v2df, v2df)
36903     v2df __builtin_ia32_unpcklpd (v2df, v2df)
36904     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
36905     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
36906     v4si __builtin_ia32_paddd128 (v4si, v4si)
36907     v2di __builtin_ia32_paddq128 (v2di, v2di)
36908     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
36909     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
36910     v4si __builtin_ia32_psubd128 (v4si, v4si)
36911     v2di __builtin_ia32_psubq128 (v2di, v2di)
36912     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
36913     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
36914     v2di __builtin_ia32_pand128 (v2di, v2di)
36915     v2di __builtin_ia32_pandn128 (v2di, v2di)
36916     v2di __builtin_ia32_por128 (v2di, v2di)
36917     v2di __builtin_ia32_pxor128 (v2di, v2di)
36918     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
36919     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
36920     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
36921     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
36922     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
36923     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
36924     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
36925     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
36926     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
36927     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
36928     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
36929     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
36930     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
36931     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
36932     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
36933     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
36934     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
36935     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
36936     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
36937     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
36938     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
36939     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
36940     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
36941     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
36942     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
36943     v2df __builtin_ia32_loadupd (double *)
36944     void __builtin_ia32_storeupd (double *, v2df)
36945     v2df __builtin_ia32_loadhpd (v2df, double const *)
36946     v2df __builtin_ia32_loadlpd (v2df, double const *)
36947     int __builtin_ia32_movmskpd (v2df)
36948     int __builtin_ia32_pmovmskb128 (v16qi)
36949     void __builtin_ia32_movnti (int *, int)
36950     void __builtin_ia32_movnti64 (long long int *, long long int)
36951     void __builtin_ia32_movntpd (double *, v2df)
36952     void __builtin_ia32_movntdq (v2df *, v2df)
36953     v4si __builtin_ia32_pshufd (v4si, int)
36954     v8hi __builtin_ia32_pshuflw (v8hi, int)
36955     v8hi __builtin_ia32_pshufhw (v8hi, int)
36956     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
36957     v2df __builtin_ia32_sqrtpd (v2df)
36958     v2df __builtin_ia32_sqrtsd (v2df)
36959     v2df __builtin_ia32_shufpd (v2df, v2df, int)
36960     v2df __builtin_ia32_cvtdq2pd (v4si)
36961     v4sf __builtin_ia32_cvtdq2ps (v4si)
36962     v4si __builtin_ia32_cvtpd2dq (v2df)
36963     v2si __builtin_ia32_cvtpd2pi (v2df)
36964     v4sf __builtin_ia32_cvtpd2ps (v2df)
36965     v4si __builtin_ia32_cvttpd2dq (v2df)
36966     v2si __builtin_ia32_cvttpd2pi (v2df)
36967     v2df __builtin_ia32_cvtpi2pd (v2si)
36968     int __builtin_ia32_cvtsd2si (v2df)
36969     int __builtin_ia32_cvttsd2si (v2df)
36970     long long __builtin_ia32_cvtsd2si64 (v2df)
36971     long long __builtin_ia32_cvttsd2si64 (v2df)
36972     v4si __builtin_ia32_cvtps2dq (v4sf)
36973     v2df __builtin_ia32_cvtps2pd (v4sf)
36974     v4si __builtin_ia32_cvttps2dq (v4sf)
36975     v2df __builtin_ia32_cvtsi2sd (v2df, int)
36976     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
36977     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
36978     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
36979     void __builtin_ia32_clflush (const void *)
36980     void __builtin_ia32_lfence (void)
36981     void __builtin_ia32_mfence (void)
36982     v16qi __builtin_ia32_loaddqu (const char *)
36983     void __builtin_ia32_storedqu (char *, v16qi)
36984     v1di __builtin_ia32_pmuludq (v2si, v2si)
36985     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
36986     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
36987     v4si __builtin_ia32_pslld128 (v4si, v4si)
36988     v2di __builtin_ia32_psllq128 (v2di, v2di)
36989     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
36990     v4si __builtin_ia32_psrld128 (v4si, v4si)
36991     v2di __builtin_ia32_psrlq128 (v2di, v2di)
36992     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
36993     v4si __builtin_ia32_psrad128 (v4si, v4si)
36994     v2di __builtin_ia32_pslldqi128 (v2di, int)
36995     v8hi __builtin_ia32_psllwi128 (v8hi, int)
36996     v4si __builtin_ia32_pslldi128 (v4si, int)
36997     v2di __builtin_ia32_psllqi128 (v2di, int)
36998     v2di __builtin_ia32_psrldqi128 (v2di, int)
36999     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
37000     v4si __builtin_ia32_psrldi128 (v4si, int)
37001     v2di __builtin_ia32_psrlqi128 (v2di, int)
37002     v8hi __builtin_ia32_psrawi128 (v8hi, int)
37003     v4si __builtin_ia32_psradi128 (v4si, int)
37004     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
37005     v2di __builtin_ia32_movq128 (v2di)
37006
37007 The following built-in functions are available when '-msse3' is used.
37008All of them generate the machine instruction that is part of the name.
37009
37010     v2df __builtin_ia32_addsubpd (v2df, v2df)
37011     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
37012     v2df __builtin_ia32_haddpd (v2df, v2df)
37013     v4sf __builtin_ia32_haddps (v4sf, v4sf)
37014     v2df __builtin_ia32_hsubpd (v2df, v2df)
37015     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
37016     v16qi __builtin_ia32_lddqu (char const *)
37017     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
37018     v2df __builtin_ia32_movddup (v2df)
37019     v4sf __builtin_ia32_movshdup (v4sf)
37020     v4sf __builtin_ia32_movsldup (v4sf)
37021     void __builtin_ia32_mwait (unsigned int, unsigned int)
37022
37023 The following built-in functions are available when '-msse3' is used.
37024
37025'v2df __builtin_ia32_loadddup (double const *)'
37026     Generates the 'movddup' machine instruction as a load from memory.
37027
37028 The following built-in functions are available when '-mssse3' is used.
37029All of them generate the machine instruction that is part of the name
37030with MMX registers.
37031
37032     v2si __builtin_ia32_phaddd (v2si, v2si)
37033     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
37034     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
37035     v2si __builtin_ia32_phsubd (v2si, v2si)
37036     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
37037     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
37038     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
37039     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
37040     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
37041     v8qi __builtin_ia32_psignb (v8qi, v8qi)
37042     v2si __builtin_ia32_psignd (v2si, v2si)
37043     v4hi __builtin_ia32_psignw (v4hi, v4hi)
37044     v1di __builtin_ia32_palignr (v1di, v1di, int)
37045     v8qi __builtin_ia32_pabsb (v8qi)
37046     v2si __builtin_ia32_pabsd (v2si)
37047     v4hi __builtin_ia32_pabsw (v4hi)
37048
37049 The following built-in functions are available when '-mssse3' is used.
37050All of them generate the machine instruction that is part of the name
37051with SSE registers.
37052
37053     v4si __builtin_ia32_phaddd128 (v4si, v4si)
37054     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
37055     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
37056     v4si __builtin_ia32_phsubd128 (v4si, v4si)
37057     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
37058     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
37059     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
37060     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
37061     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
37062     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
37063     v4si __builtin_ia32_psignd128 (v4si, v4si)
37064     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
37065     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
37066     v16qi __builtin_ia32_pabsb128 (v16qi)
37067     v4si __builtin_ia32_pabsd128 (v4si)
37068     v8hi __builtin_ia32_pabsw128 (v8hi)
37069
37070 The following built-in functions are available when '-msse4.1' is used.
37071All of them generate the machine instruction that is part of the name.
37072
37073     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
37074     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
37075     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
37076     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
37077     v2df __builtin_ia32_dppd (v2df, v2df, const int)
37078     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
37079     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
37080     v2di __builtin_ia32_movntdqa (v2di *);
37081     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
37082     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
37083     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
37084     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
37085     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
37086     v8hi __builtin_ia32_phminposuw128 (v8hi)
37087     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
37088     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
37089     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
37090     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
37091     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
37092     v4si __builtin_ia32_pminsd128 (v4si, v4si)
37093     v4si __builtin_ia32_pminud128 (v4si, v4si)
37094     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
37095     v4si __builtin_ia32_pmovsxbd128 (v16qi)
37096     v2di __builtin_ia32_pmovsxbq128 (v16qi)
37097     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
37098     v2di __builtin_ia32_pmovsxdq128 (v4si)
37099     v4si __builtin_ia32_pmovsxwd128 (v8hi)
37100     v2di __builtin_ia32_pmovsxwq128 (v8hi)
37101     v4si __builtin_ia32_pmovzxbd128 (v16qi)
37102     v2di __builtin_ia32_pmovzxbq128 (v16qi)
37103     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
37104     v2di __builtin_ia32_pmovzxdq128 (v4si)
37105     v4si __builtin_ia32_pmovzxwd128 (v8hi)
37106     v2di __builtin_ia32_pmovzxwq128 (v8hi)
37107     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
37108     v4si __builtin_ia32_pmulld128 (v4si, v4si)
37109     int __builtin_ia32_ptestc128 (v2di, v2di)
37110     int __builtin_ia32_ptestnzc128 (v2di, v2di)
37111     int __builtin_ia32_ptestz128 (v2di, v2di)
37112     v2df __builtin_ia32_roundpd (v2df, const int)
37113     v4sf __builtin_ia32_roundps (v4sf, const int)
37114     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
37115     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
37116
37117 The following built-in functions are available when '-msse4.1' is used.
37118
37119'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
37120     Generates the 'insertps' machine instruction.
37121'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
37122     Generates the 'pextrb' machine instruction.
37123'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
37124     Generates the 'pinsrb' machine instruction.
37125'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
37126     Generates the 'pinsrd' machine instruction.
37127'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
37128     Generates the 'pinsrq' machine instruction in 64bit mode.
37129
37130 The following built-in functions are changed to generate new SSE4.1
37131instructions when '-msse4.1' is used.
37132
37133'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
37134     Generates the 'extractps' machine instruction.
37135'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
37136     Generates the 'pextrd' machine instruction.
37137'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
37138     Generates the 'pextrq' machine instruction in 64bit mode.
37139
37140 The following built-in functions are available when '-msse4.2' is used.
37141All of them generate the machine instruction that is part of the name.
37142
37143     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
37144     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
37145     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
37146     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
37147     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
37148     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
37149     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
37150     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
37151     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
37152     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
37153     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
37154     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
37155     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
37156     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
37157     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
37158
37159 The following built-in functions are available when '-msse4.2' is used.
37160
37161'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
37162     Generates the 'crc32b' machine instruction.
37163'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
37164     Generates the 'crc32w' machine instruction.
37165'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
37166     Generates the 'crc32l' machine instruction.
37167'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
37168     Generates the 'crc32q' machine instruction.
37169
37170 The following built-in functions are changed to generate new SSE4.2
37171instructions when '-msse4.2' is used.
37172
37173'int __builtin_popcount (unsigned int)'
37174     Generates the 'popcntl' machine instruction.
37175'int __builtin_popcountl (unsigned long)'
37176     Generates the 'popcntl' or 'popcntq' machine instruction, depending
37177     on the size of 'unsigned long'.
37178'int __builtin_popcountll (unsigned long long)'
37179     Generates the 'popcntq' machine instruction.
37180
37181 The following built-in functions are available when '-mavx' is used.
37182All of them generate the machine instruction that is part of the name.
37183
37184     v4df __builtin_ia32_addpd256 (v4df,v4df)
37185     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
37186     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
37187     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
37188     v4df __builtin_ia32_andnpd256 (v4df,v4df)
37189     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
37190     v4df __builtin_ia32_andpd256 (v4df,v4df)
37191     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
37192     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
37193     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
37194     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
37195     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
37196     v2df __builtin_ia32_cmppd (v2df,v2df,int)
37197     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
37198     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
37199     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
37200     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
37201     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
37202     v4df __builtin_ia32_cvtdq2pd256 (v4si)
37203     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
37204     v4si __builtin_ia32_cvtpd2dq256 (v4df)
37205     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
37206     v8si __builtin_ia32_cvtps2dq256 (v8sf)
37207     v4df __builtin_ia32_cvtps2pd256 (v4sf)
37208     v4si __builtin_ia32_cvttpd2dq256 (v4df)
37209     v8si __builtin_ia32_cvttps2dq256 (v8sf)
37210     v4df __builtin_ia32_divpd256 (v4df,v4df)
37211     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
37212     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
37213     v4df __builtin_ia32_haddpd256 (v4df,v4df)
37214     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
37215     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
37216     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
37217     v32qi __builtin_ia32_lddqu256 (pcchar)
37218     v32qi __builtin_ia32_loaddqu256 (pcchar)
37219     v4df __builtin_ia32_loadupd256 (pcdouble)
37220     v8sf __builtin_ia32_loadups256 (pcfloat)
37221     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
37222     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
37223     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
37224     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
37225     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
37226     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
37227     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
37228     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
37229     v4df __builtin_ia32_maxpd256 (v4df,v4df)
37230     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
37231     v4df __builtin_ia32_minpd256 (v4df,v4df)
37232     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
37233     v4df __builtin_ia32_movddup256 (v4df)
37234     int __builtin_ia32_movmskpd256 (v4df)
37235     int __builtin_ia32_movmskps256 (v8sf)
37236     v8sf __builtin_ia32_movshdup256 (v8sf)
37237     v8sf __builtin_ia32_movsldup256 (v8sf)
37238     v4df __builtin_ia32_mulpd256 (v4df,v4df)
37239     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
37240     v4df __builtin_ia32_orpd256 (v4df,v4df)
37241     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
37242     v2df __builtin_ia32_pd_pd256 (v4df)
37243     v4df __builtin_ia32_pd256_pd (v2df)
37244     v4sf __builtin_ia32_ps_ps256 (v8sf)
37245     v8sf __builtin_ia32_ps256_ps (v4sf)
37246     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
37247     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
37248     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
37249     v8sf __builtin_ia32_rcpps256 (v8sf)
37250     v4df __builtin_ia32_roundpd256 (v4df,int)
37251     v8sf __builtin_ia32_roundps256 (v8sf,int)
37252     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
37253     v8sf __builtin_ia32_rsqrtps256 (v8sf)
37254     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
37255     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
37256     v4si __builtin_ia32_si_si256 (v8si)
37257     v8si __builtin_ia32_si256_si (v4si)
37258     v4df __builtin_ia32_sqrtpd256 (v4df)
37259     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
37260     v8sf __builtin_ia32_sqrtps256 (v8sf)
37261     void __builtin_ia32_storedqu256 (pchar,v32qi)
37262     void __builtin_ia32_storeupd256 (pdouble,v4df)
37263     void __builtin_ia32_storeups256 (pfloat,v8sf)
37264     v4df __builtin_ia32_subpd256 (v4df,v4df)
37265     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
37266     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
37267     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
37268     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
37269     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
37270     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
37271     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
37272     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
37273     v4sf __builtin_ia32_vbroadcastss (pcfloat)
37274     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
37275     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
37276     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
37277     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
37278     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
37279     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
37280     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
37281     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
37282     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
37283     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
37284     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
37285     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
37286     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
37287     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
37288     v2df __builtin_ia32_vpermilpd (v2df,int)
37289     v4df __builtin_ia32_vpermilpd256 (v4df,int)
37290     v4sf __builtin_ia32_vpermilps (v4sf,int)
37291     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
37292     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
37293     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
37294     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
37295     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
37296     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
37297     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
37298     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
37299     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
37300     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
37301     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
37302     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
37303     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
37304     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
37305     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
37306     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
37307     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
37308     void __builtin_ia32_vzeroall (void)
37309     void __builtin_ia32_vzeroupper (void)
37310     v4df __builtin_ia32_xorpd256 (v4df,v4df)
37311     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
37312
37313 The following built-in functions are available when '-mavx2' is used.
37314All of them generate the machine instruction that is part of the name.
37315
37316     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
37317     v32qi __builtin_ia32_pabsb256 (v32qi)
37318     v16hi __builtin_ia32_pabsw256 (v16hi)
37319     v8si __builtin_ia32_pabsd256 (v8si)
37320     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
37321     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
37322     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
37323     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
37324     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
37325     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
37326     v8si __builtin_ia32_paddd256 (v8si,v8si)
37327     v4di __builtin_ia32_paddq256 (v4di,v4di)
37328     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
37329     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
37330     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
37331     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
37332     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
37333     v4di __builtin_ia32_andsi256 (v4di,v4di)
37334     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
37335     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
37336     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
37337     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
37338     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
37339     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
37340     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
37341     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
37342     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
37343     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
37344     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
37345     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
37346     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
37347     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
37348     v8si __builtin_ia32_phaddd256 (v8si,v8si)
37349     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
37350     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
37351     v8si __builtin_ia32_phsubd256 (v8si,v8si)
37352     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
37353     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
37354     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
37355     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
37356     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
37357     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
37358     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
37359     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
37360     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
37361     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
37362     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
37363     v8si __builtin_ia32_pminsd256 (v8si,v8si)
37364     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
37365     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
37366     v8si __builtin_ia32_pminud256 (v8si,v8si)
37367     int __builtin_ia32_pmovmskb256 (v32qi)
37368     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
37369     v8si __builtin_ia32_pmovsxbd256 (v16qi)
37370     v4di __builtin_ia32_pmovsxbq256 (v16qi)
37371     v8si __builtin_ia32_pmovsxwd256 (v8hi)
37372     v4di __builtin_ia32_pmovsxwq256 (v8hi)
37373     v4di __builtin_ia32_pmovsxdq256 (v4si)
37374     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
37375     v8si __builtin_ia32_pmovzxbd256 (v16qi)
37376     v4di __builtin_ia32_pmovzxbq256 (v16qi)
37377     v8si __builtin_ia32_pmovzxwd256 (v8hi)
37378     v4di __builtin_ia32_pmovzxwq256 (v8hi)
37379     v4di __builtin_ia32_pmovzxdq256 (v4si)
37380     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
37381     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
37382     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
37383     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
37384     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
37385     v8si __builtin_ia32_pmulld256 (v8si,v8si)
37386     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
37387     v4di __builtin_ia32_por256 (v4di,v4di)
37388     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
37389     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
37390     v8si __builtin_ia32_pshufd256 (v8si,int)
37391     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
37392     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
37393     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
37394     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
37395     v8si __builtin_ia32_psignd256 (v8si,v8si)
37396     v4di __builtin_ia32_pslldqi256 (v4di,int)
37397     v16hi __builtin_ia32_psllwi256 (16hi,int)
37398     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
37399     v8si __builtin_ia32_pslldi256 (v8si,int)
37400     v8si __builtin_ia32_pslld256(v8si,v4si)
37401     v4di __builtin_ia32_psllqi256 (v4di,int)
37402     v4di __builtin_ia32_psllq256(v4di,v2di)
37403     v16hi __builtin_ia32_psrawi256 (v16hi,int)
37404     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
37405     v8si __builtin_ia32_psradi256 (v8si,int)
37406     v8si __builtin_ia32_psrad256 (v8si,v4si)
37407     v4di __builtin_ia32_psrldqi256 (v4di, int)
37408     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
37409     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
37410     v8si __builtin_ia32_psrldi256 (v8si,int)
37411     v8si __builtin_ia32_psrld256 (v8si,v4si)
37412     v4di __builtin_ia32_psrlqi256 (v4di,int)
37413     v4di __builtin_ia32_psrlq256(v4di,v2di)
37414     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
37415     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
37416     v8si __builtin_ia32_psubd256 (v8si,v8si)
37417     v4di __builtin_ia32_psubq256 (v4di,v4di)
37418     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
37419     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
37420     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
37421     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
37422     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
37423     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
37424     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
37425     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
37426     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
37427     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
37428     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
37429     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
37430     v4di __builtin_ia32_pxor256 (v4di,v4di)
37431     v4di __builtin_ia32_movntdqa256 (pv4di)
37432     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
37433     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
37434     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
37435     v4di __builtin_ia32_vbroadcastsi256 (v2di)
37436     v4si __builtin_ia32_pblendd128 (v4si,v4si)
37437     v8si __builtin_ia32_pblendd256 (v8si,v8si)
37438     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
37439     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
37440     v8si __builtin_ia32_pbroadcastd256 (v4si)
37441     v4di __builtin_ia32_pbroadcastq256 (v2di)
37442     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
37443     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
37444     v4si __builtin_ia32_pbroadcastd128 (v4si)
37445     v2di __builtin_ia32_pbroadcastq128 (v2di)
37446     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
37447     v4df __builtin_ia32_permdf256 (v4df,int)
37448     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
37449     v4di __builtin_ia32_permdi256 (v4di,int)
37450     v4di __builtin_ia32_permti256 (v4di,v4di,int)
37451     v4di __builtin_ia32_extract128i256 (v4di,int)
37452     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
37453     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
37454     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
37455     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
37456     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
37457     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
37458     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
37459     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
37460     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
37461     v8si __builtin_ia32_psllv8si (v8si,v8si)
37462     v4si __builtin_ia32_psllv4si (v4si,v4si)
37463     v4di __builtin_ia32_psllv4di (v4di,v4di)
37464     v2di __builtin_ia32_psllv2di (v2di,v2di)
37465     v8si __builtin_ia32_psrav8si (v8si,v8si)
37466     v4si __builtin_ia32_psrav4si (v4si,v4si)
37467     v8si __builtin_ia32_psrlv8si (v8si,v8si)
37468     v4si __builtin_ia32_psrlv4si (v4si,v4si)
37469     v4di __builtin_ia32_psrlv4di (v4di,v4di)
37470     v2di __builtin_ia32_psrlv2di (v2di,v2di)
37471     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
37472     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
37473     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
37474     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
37475     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
37476     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
37477     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
37478     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
37479     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
37480     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
37481     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
37482     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
37483     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
37484     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
37485     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
37486     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
37487
37488 The following built-in functions are available when '-maes' is used.
37489All of them generate the machine instruction that is part of the name.
37490
37491     v2di __builtin_ia32_aesenc128 (v2di, v2di)
37492     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
37493     v2di __builtin_ia32_aesdec128 (v2di, v2di)
37494     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
37495     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
37496     v2di __builtin_ia32_aesimc128 (v2di)
37497
37498 The following built-in function is available when '-mpclmul' is used.
37499
37500'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
37501     Generates the 'pclmulqdq' machine instruction.
37502
37503 The following built-in function is available when '-mfsgsbase' is used.
37504All of them generate the machine instruction that is part of the name.
37505
37506     unsigned int __builtin_ia32_rdfsbase32 (void)
37507     unsigned long long __builtin_ia32_rdfsbase64 (void)
37508     unsigned int __builtin_ia32_rdgsbase32 (void)
37509     unsigned long long __builtin_ia32_rdgsbase64 (void)
37510     void _writefsbase_u32 (unsigned int)
37511     void _writefsbase_u64 (unsigned long long)
37512     void _writegsbase_u32 (unsigned int)
37513     void _writegsbase_u64 (unsigned long long)
37514
37515 The following built-in function is available when '-mrdrnd' is used.
37516All of them generate the machine instruction that is part of the name.
37517
37518     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
37519     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
37520     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
37521
37522 The following built-in functions are available when '-msse4a' is used.
37523All of them generate the machine instruction that is part of the name.
37524
37525     void __builtin_ia32_movntsd (double *, v2df)
37526     void __builtin_ia32_movntss (float *, v4sf)
37527     v2di __builtin_ia32_extrq  (v2di, v16qi)
37528     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
37529     v2di __builtin_ia32_insertq (v2di, v2di)
37530     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
37531
37532 The following built-in functions are available when '-mxop' is used.
37533     v2df __builtin_ia32_vfrczpd (v2df)
37534     v4sf __builtin_ia32_vfrczps (v4sf)
37535     v2df __builtin_ia32_vfrczsd (v2df, v2df)
37536     v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
37537     v4df __builtin_ia32_vfrczpd256 (v4df)
37538     v8sf __builtin_ia32_vfrczps256 (v8sf)
37539     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
37540     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
37541     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
37542     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
37543     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
37544     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
37545     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
37546     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
37547     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
37548     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
37549     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
37550     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
37551     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
37552     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
37553     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37554     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
37555     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
37556     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
37557     v4si __builtin_ia32_vpcomequd (v4si, v4si)
37558     v2di __builtin_ia32_vpcomequq (v2di, v2di)
37559     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
37560     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37561     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
37562     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
37563     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
37564     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
37565     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
37566     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
37567     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
37568     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
37569     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
37570     v4si __builtin_ia32_vpcomged (v4si, v4si)
37571     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
37572     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
37573     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
37574     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
37575     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
37576     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
37577     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
37578     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
37579     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
37580     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
37581     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
37582     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
37583     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
37584     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
37585     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
37586     v4si __builtin_ia32_vpcomled (v4si, v4si)
37587     v2di __builtin_ia32_vpcomleq (v2di, v2di)
37588     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
37589     v4si __builtin_ia32_vpcomleud (v4si, v4si)
37590     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
37591     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
37592     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
37593     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
37594     v4si __builtin_ia32_vpcomltd (v4si, v4si)
37595     v2di __builtin_ia32_vpcomltq (v2di, v2di)
37596     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
37597     v4si __builtin_ia32_vpcomltud (v4si, v4si)
37598     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
37599     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
37600     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
37601     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
37602     v4si __builtin_ia32_vpcomned (v4si, v4si)
37603     v2di __builtin_ia32_vpcomneq (v2di, v2di)
37604     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
37605     v4si __builtin_ia32_vpcomneud (v4si, v4si)
37606     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
37607     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
37608     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
37609     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
37610     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
37611     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
37612     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
37613     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
37614     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
37615     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
37616     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
37617     v4si __builtin_ia32_vphaddbd (v16qi)
37618     v2di __builtin_ia32_vphaddbq (v16qi)
37619     v8hi __builtin_ia32_vphaddbw (v16qi)
37620     v2di __builtin_ia32_vphadddq (v4si)
37621     v4si __builtin_ia32_vphaddubd (v16qi)
37622     v2di __builtin_ia32_vphaddubq (v16qi)
37623     v8hi __builtin_ia32_vphaddubw (v16qi)
37624     v2di __builtin_ia32_vphaddudq (v4si)
37625     v4si __builtin_ia32_vphadduwd (v8hi)
37626     v2di __builtin_ia32_vphadduwq (v8hi)
37627     v4si __builtin_ia32_vphaddwd (v8hi)
37628     v2di __builtin_ia32_vphaddwq (v8hi)
37629     v8hi __builtin_ia32_vphsubbw (v16qi)
37630     v2di __builtin_ia32_vphsubdq (v4si)
37631     v4si __builtin_ia32_vphsubwd (v8hi)
37632     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
37633     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
37634     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
37635     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
37636     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
37637     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
37638     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
37639     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
37640     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
37641     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
37642     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
37643     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
37644     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
37645     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
37646     v4si __builtin_ia32_vprotd (v4si, v4si)
37647     v2di __builtin_ia32_vprotq (v2di, v2di)
37648     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
37649     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
37650     v4si __builtin_ia32_vpshad (v4si, v4si)
37651     v2di __builtin_ia32_vpshaq (v2di, v2di)
37652     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
37653     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
37654     v4si __builtin_ia32_vpshld (v4si, v4si)
37655     v2di __builtin_ia32_vpshlq (v2di, v2di)
37656     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
37657
37658 The following built-in functions are available when '-mfma4' is used.
37659All of them generate the machine instruction that is part of the name
37660with MMX registers.
37661
37662     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
37663     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
37664     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
37665     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
37666     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
37667     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
37668     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
37669     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
37670     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
37671     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
37672     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
37673     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
37674     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
37675     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
37676     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
37677     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
37678     v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
37679     v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
37680     v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
37681     v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
37682     v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
37683     v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
37684     v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
37685     v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
37686     v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
37687     v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
37688     v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
37689     v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
37690     v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
37691     v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
37692     v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
37693     v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
37694
37695
37696 The following built-in functions are available when '-mlwp' is used.
37697
37698     void __builtin_ia32_llwpcb16 (void *);
37699     void __builtin_ia32_llwpcb32 (void *);
37700     void __builtin_ia32_llwpcb64 (void *);
37701     void * __builtin_ia32_llwpcb16 (void);
37702     void * __builtin_ia32_llwpcb32 (void);
37703     void * __builtin_ia32_llwpcb64 (void);
37704     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
37705     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
37706     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
37707     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
37708     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
37709     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
37710
37711 The following built-in functions are available when '-mbmi' is used.
37712All of them generate the machine instruction that is part of the name.
37713     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
37714     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
37715
37716 The following built-in functions are available when '-mbmi2' is used.
37717All of them generate the machine instruction that is part of the name.
37718     unsigned int _bzhi_u32 (unsigned int, unsigned int)
37719     unsigned int _pdep_u32 (unsigned int, unsigned int)
37720     unsigned int _pext_u32 (unsigned int, unsigned int)
37721     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
37722     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
37723     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
37724
37725 The following built-in functions are available when '-mlzcnt' is used.
37726All of them generate the machine instruction that is part of the name.
37727     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
37728     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
37729     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
37730
37731 The following built-in functions are available when '-mtbm' is used.
37732Both of them generate the immediate form of the bextr machine
37733instruction.
37734     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
37735     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
37736
37737 The following built-in functions are available when '-m3dnow' is used.
37738All of them generate the machine instruction that is part of the name.
37739
37740     void __builtin_ia32_femms (void)
37741     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
37742     v2si __builtin_ia32_pf2id (v2sf)
37743     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
37744     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
37745     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
37746     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
37747     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
37748     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
37749     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
37750     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
37751     v2sf __builtin_ia32_pfrcp (v2sf)
37752     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
37753     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
37754     v2sf __builtin_ia32_pfrsqrt (v2sf)
37755     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
37756     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
37757     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
37758     v2sf __builtin_ia32_pi2fd (v2si)
37759     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
37760
37761 The following built-in functions are available when both '-m3dnow' and
37762'-march=athlon' are used.  All of them generate the machine instruction
37763that is part of the name.
37764
37765     v2si __builtin_ia32_pf2iw (v2sf)
37766     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
37767     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
37768     v2sf __builtin_ia32_pi2fw (v2si)
37769     v2sf __builtin_ia32_pswapdsf (v2sf)
37770     v2si __builtin_ia32_pswapdsi (v2si)
37771
37772 The following built-in functions are available when '-mrtm' is used
37773They are used for restricted transactional memory.  These are the
37774internal low level functions.  Normally the functions in *note X86
37775transactional memory intrinsics:: should be used instead.
37776
37777     int __builtin_ia32_xbegin ()
37778     void __builtin_ia32_xend ()
37779     void __builtin_ia32_xabort (status)
37780     int __builtin_ia32_xtest ()
37781
37782
37783File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
37784
377856.56.8 X86 transaction memory intrinsics
37786----------------------------------------
37787
37788Hardware transactional memory intrinsics for i386.  These allow to use
37789memory transactions with RTM (Restricted Transactional Memory).  For
37790using HLE (Hardware Lock Elision) see *note x86 specific memory model
37791extensions for transactional memory:: instead.  This support is enabled
37792with the '-mrtm' option.
37793
37794 A memory transaction commits all changes to memory in an atomic way, as
37795visible to other threads.  If the transaction fails it is rolled back
37796and all side effects discarded.
37797
37798 Generally there is no guarantee that a memory transaction ever suceeds
37799and suitable fallback code always needs to be supplied.
37800
37801 -- RTM Function: unsigned _xbegin ()
37802     Start a RTM (Restricted Transactional Memory) transaction.  Returns
37803     _XBEGIN_STARTED when the transaction started successfully (note
37804     this is not 0, so the constant has to be explicitely tested).  When
37805     the transaction aborts all side effects are undone and an abort
37806     code is returned.  There is no guarantee any transaction ever
37807     succeeds, so there always needs to be a valid tested fallback path.
37808
37809     #include <immintrin.h>
37810
37811     if ((status = _xbegin ()) == _XBEGIN_STARTED) {
37812         ... transaction code...
37813         _xend ();
37814     } else {
37815         ... non transactional fallback path...
37816     }
37817
37818 Valid abort status bits (when the value is not '_XBEGIN_STARTED') are:
37819
37820'_XABORT_EXPLICIT'
37821     Transaction explicitely aborted with '_xabort'.  The parameter
37822     passed to '_xabort' is available with '_XABORT_CODE(status)'
37823'_XABORT_RETRY'
37824     Transaction retry is possible.
37825'_XABORT_CONFLICT'
37826     Transaction abort due to a memory conflict with another thread
37827'_XABORT_CAPACITY'
37828     Transaction abort due to the transaction using too much memory
37829'_XABORT_DEBUG'
37830     Transaction abort due to a debug trap
37831'_XABORT_NESTED'
37832     Transaction abort in a inner nested transaction
37833
37834 -- RTM Function: void _xend ()
37835     Commit the current transaction.  When no transaction is active this
37836     will fault.  All memory side effects of the transactions will
37837     become visible to other threads in an atomic matter.
37838
37839 -- RTM Function: int _xtest ()
37840     Return a value not zero when a transaction is currently active,
37841     otherwise 0.
37842
37843 -- RTM Function: void _xabort (status)
37844     Abort the current transaction.  When no transaction is active this
37845     is a no-op.  status must be a 8bit constant, that is included in
37846     the status code returned by '_xbegin'
37847
37848
37849File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
37850
378516.56.9 MIPS DSP Built-in Functions
37852----------------------------------
37853
37854The MIPS DSP Application-Specific Extension (ASE) includes new
37855instructions that are designed to improve the performance of DSP and
37856media applications.  It provides instructions that operate on packed
378578-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
37858
37859 GCC supports MIPS DSP operations using both the generic vector
37860extensions (*note Vector Extensions::) and a collection of MIPS-specific
37861built-in functions.  Both kinds of support are enabled by the '-mdsp'
37862command-line option.
37863
37864 Revision 2 of the ASE was introduced in the second half of 2006.  This
37865revision adds extra instructions to the original ASE, but is otherwise
37866backwards-compatible with it.  You can select revision 2 using the
37867command-line option '-mdspr2'; this option implies '-mdsp'.
37868
37869 The SCOUNT and POS bits of the DSP control register are global.  The
37870WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
37871bits.  During optimization, the compiler does not delete these
37872instructions and it does not delete calls to functions containing these
37873instructions.
37874
37875 At present, GCC only provides support for operations on 32-bit vectors.
37876The vector type associated with 8-bit integer data is usually called
37877'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
37878vector type associated with 16-bit integer data is usually called
37879'v2i16', and the vector type associated with Q15 is usually called
37880'v2q15'.  They can be defined in C as follows:
37881
37882     typedef signed char v4i8 __attribute__ ((vector_size(4)));
37883     typedef signed char v4q7 __attribute__ ((vector_size(4)));
37884     typedef short v2i16 __attribute__ ((vector_size(4)));
37885     typedef short v2q15 __attribute__ ((vector_size(4)));
37886
37887 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
37888way as aggregates.  For example:
37889
37890     v4i8 a = {1, 2, 3, 4};
37891     v4i8 b;
37892     b = (v4i8) {5, 6, 7, 8};
37893
37894     v2q15 c = {0x0fcb, 0x3a75};
37895     v2q15 d;
37896     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
37897
37898 _Note:_ The CPU's endianness determines the order in which values are
37899packed.  On little-endian targets, the first value is the least
37900significant and the last value is the most significant.  The opposite
37901order applies to big-endian targets.  For example, the code above sets
37902the lowest byte of 'a' to '1' on little-endian targets and '4' on
37903big-endian targets.
37904
37905 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
37906representation.  As shown in this example, the integer representation of
37907a Q7 value can be obtained by multiplying the fractional value by
37908'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
37909The equivalent for Q31 values is to multiply by '0x1.0p31'.
37910
37911 The table below lists the 'v4i8' and 'v2q15' operations for which
37912hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
37913are 'v2q15' values.
37914
37915C code                               MIPS instruction
37916'a + b'                              'addu.qb'
37917'c + d'                              'addq.ph'
37918'a - b'                              'subu.qb'
37919'c - d'                              'subq.ph'
37920
37921 The table below lists the 'v2i16' operation for which hardware support
37922exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
37923
37924C code                               MIPS instruction
37925'e * f'                              'mul.ph'
37926
37927 It is easier to describe the DSP built-in functions if we first define
37928the following types:
37929
37930     typedef int q31;
37931     typedef int i32;
37932     typedef unsigned int ui32;
37933     typedef long long a64;
37934
37935 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
37936indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
37937value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
37938indicate values that are placed in one of the four DSP accumulators
37939('$ac0', '$ac1', '$ac2' or '$ac3').
37940
37941 Also, some built-in functions prefer or require immediate numbers as
37942parameters, because the corresponding DSP instructions accept both
37943immediate numbers and register operands, or accept immediate numbers
37944only.  The immediate parameters are listed as follows.
37945
37946     imm0_3: 0 to 3.
37947     imm0_7: 0 to 7.
37948     imm0_15: 0 to 15.
37949     imm0_31: 0 to 31.
37950     imm0_63: 0 to 63.
37951     imm0_255: 0 to 255.
37952     imm_n32_31: -32 to 31.
37953     imm_n512_511: -512 to 511.
37954
37955 The following built-in functions map directly to a particular MIPS DSP
37956instruction.  Please refer to the architecture specification for details
37957on what each instruction does.
37958
37959     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
37960     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
37961     q31 __builtin_mips_addq_s_w (q31, q31)
37962     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
37963     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
37964     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
37965     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
37966     q31 __builtin_mips_subq_s_w (q31, q31)
37967     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
37968     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
37969     i32 __builtin_mips_addsc (i32, i32)
37970     i32 __builtin_mips_addwc (i32, i32)
37971     i32 __builtin_mips_modsub (i32, i32)
37972     i32 __builtin_mips_raddu_w_qb (v4i8)
37973     v2q15 __builtin_mips_absq_s_ph (v2q15)
37974     q31 __builtin_mips_absq_s_w (q31)
37975     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
37976     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
37977     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
37978     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
37979     q31 __builtin_mips_preceq_w_phl (v2q15)
37980     q31 __builtin_mips_preceq_w_phr (v2q15)
37981     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
37982     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
37983     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
37984     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
37985     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
37986     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
37987     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
37988     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
37989     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
37990     v4i8 __builtin_mips_shll_qb (v4i8, i32)
37991     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
37992     v2q15 __builtin_mips_shll_ph (v2q15, i32)
37993     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
37994     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
37995     q31 __builtin_mips_shll_s_w (q31, imm0_31)
37996     q31 __builtin_mips_shll_s_w (q31, i32)
37997     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
37998     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
37999     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
38000     v2q15 __builtin_mips_shra_ph (v2q15, i32)
38001     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
38002     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
38003     q31 __builtin_mips_shra_r_w (q31, imm0_31)
38004     q31 __builtin_mips_shra_r_w (q31, i32)
38005     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
38006     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
38007     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
38008     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
38009     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
38010     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
38011     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
38012     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
38013     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
38014     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
38015     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
38016     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
38017     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
38018     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
38019     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
38020     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
38021     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
38022     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
38023     i32 __builtin_mips_bitrev (i32)
38024     i32 __builtin_mips_insv (i32, i32)
38025     v4i8 __builtin_mips_repl_qb (imm0_255)
38026     v4i8 __builtin_mips_repl_qb (i32)
38027     v2q15 __builtin_mips_repl_ph (imm_n512_511)
38028     v2q15 __builtin_mips_repl_ph (i32)
38029     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
38030     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
38031     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
38032     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
38033     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
38034     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
38035     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
38036     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
38037     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
38038     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
38039     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
38040     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
38041     i32 __builtin_mips_extr_w (a64, imm0_31)
38042     i32 __builtin_mips_extr_w (a64, i32)
38043     i32 __builtin_mips_extr_r_w (a64, imm0_31)
38044     i32 __builtin_mips_extr_s_h (a64, i32)
38045     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
38046     i32 __builtin_mips_extr_rs_w (a64, i32)
38047     i32 __builtin_mips_extr_s_h (a64, imm0_31)
38048     i32 __builtin_mips_extr_r_w (a64, i32)
38049     i32 __builtin_mips_extp (a64, imm0_31)
38050     i32 __builtin_mips_extp (a64, i32)
38051     i32 __builtin_mips_extpdp (a64, imm0_31)
38052     i32 __builtin_mips_extpdp (a64, i32)
38053     a64 __builtin_mips_shilo (a64, imm_n32_31)
38054     a64 __builtin_mips_shilo (a64, i32)
38055     a64 __builtin_mips_mthlip (a64, i32)
38056     void __builtin_mips_wrdsp (i32, imm0_63)
38057     i32 __builtin_mips_rddsp (imm0_63)
38058     i32 __builtin_mips_lbux (void *, i32)
38059     i32 __builtin_mips_lhx (void *, i32)
38060     i32 __builtin_mips_lwx (void *, i32)
38061     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
38062     i32 __builtin_mips_bposge32 (void)
38063     a64 __builtin_mips_madd (a64, i32, i32);
38064     a64 __builtin_mips_maddu (a64, ui32, ui32);
38065     a64 __builtin_mips_msub (a64, i32, i32);
38066     a64 __builtin_mips_msubu (a64, ui32, ui32);
38067     a64 __builtin_mips_mult (i32, i32);
38068     a64 __builtin_mips_multu (ui32, ui32);
38069
38070 The following built-in functions map directly to a particular MIPS DSP
38071REV 2 instruction.  Please refer to the architecture specification for
38072details on what each instruction does.
38073
38074     v4q7 __builtin_mips_absq_s_qb (v4q7);
38075     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
38076     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
38077     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
38078     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
38079     i32 __builtin_mips_append (i32, i32, imm0_31);
38080     i32 __builtin_mips_balign (i32, i32, imm0_3);
38081     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
38082     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
38083     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
38084     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
38085     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
38086     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
38087     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
38088     q31 __builtin_mips_mulq_rs_w (q31, q31);
38089     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
38090     q31 __builtin_mips_mulq_s_w (q31, q31);
38091     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
38092     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
38093     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
38094     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
38095     i32 __builtin_mips_prepend (i32, i32, imm0_31);
38096     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
38097     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
38098     v4i8 __builtin_mips_shra_qb (v4i8, i32);
38099     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
38100     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
38101     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
38102     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
38103     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
38104     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
38105     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
38106     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
38107     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
38108     q31 __builtin_mips_addqh_w (q31, q31);
38109     q31 __builtin_mips_addqh_r_w (q31, q31);
38110     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
38111     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
38112     q31 __builtin_mips_subqh_w (q31, q31);
38113     q31 __builtin_mips_subqh_r_w (q31, q31);
38114     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
38115     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
38116     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
38117     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
38118     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
38119     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
38120
38121
38122File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
38123
381246.56.10 MIPS Paired-Single Support
38125----------------------------------
38126
38127The MIPS64 architecture includes a number of instructions that operate
38128on pairs of single-precision floating-point values.  Each pair is packed
38129into a 64-bit floating-point register, with one element being designated
38130the "upper half" and the other being designated the "lower half".
38131
38132 GCC supports paired-single operations using both the generic vector
38133extensions (*note Vector Extensions::) and a collection of MIPS-specific
38134built-in functions.  Both kinds of support are enabled by the
38135'-mpaired-single' command-line option.
38136
38137 The vector type associated with paired-single values is usually called
38138'v2sf'.  It can be defined in C as follows:
38139
38140     typedef float v2sf __attribute__ ((vector_size (8)));
38141
38142 'v2sf' values are initialized in the same way as aggregates.  For
38143example:
38144
38145     v2sf a = {1.5, 9.1};
38146     v2sf b;
38147     float e, f;
38148     b = (v2sf) {e, f};
38149
38150 _Note:_ The CPU's endianness determines which value is stored in the
38151upper half of a register and which value is stored in the lower half.
38152On little-endian targets, the first value is the lower one and the
38153second value is the upper one.  The opposite order applies to big-endian
38154targets.  For example, the code above sets the lower half of 'a' to
38155'1.5' on little-endian targets and '9.1' on big-endian targets.
38156
38157
38158File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
38159
381606.56.11 MIPS Loongson Built-in Functions
38161----------------------------------------
38162
38163GCC provides intrinsics to access the SIMD instructions provided by the
38164ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
38165available after inclusion of the 'loongson.h' header file, operate on
38166the following 64-bit vector types:
38167
38168   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
38169   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
38170   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
38171   * 'int8x8_t', a vector of eight signed 8-bit integers;
38172   * 'int16x4_t', a vector of four signed 16-bit integers;
38173   * 'int32x2_t', a vector of two signed 32-bit integers.
38174
38175 The intrinsics provided are listed below; each is named after the
38176machine instruction to which it corresponds, with suffixes added as
38177appropriate to distinguish intrinsics that expand to the same machine
38178instruction yet have different argument types.  Refer to the
38179architecture documentation for a description of the functionality of
38180each instruction.
38181
38182     int16x4_t packsswh (int32x2_t s, int32x2_t t);
38183     int8x8_t packsshb (int16x4_t s, int16x4_t t);
38184     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
38185     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
38186     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
38187     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
38188     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
38189     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
38190     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
38191     uint64_t paddd_u (uint64_t s, uint64_t t);
38192     int64_t paddd_s (int64_t s, int64_t t);
38193     int16x4_t paddsh (int16x4_t s, int16x4_t t);
38194     int8x8_t paddsb (int8x8_t s, int8x8_t t);
38195     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
38196     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
38197     uint64_t pandn_ud (uint64_t s, uint64_t t);
38198     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
38199     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
38200     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
38201     int64_t pandn_sd (int64_t s, int64_t t);
38202     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
38203     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
38204     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
38205     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
38206     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
38207     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
38208     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
38209     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
38210     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
38211     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
38212     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
38213     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
38214     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
38215     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
38216     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
38217     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
38218     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
38219     uint16x4_t pextrh_u (uint16x4_t s, int field);
38220     int16x4_t pextrh_s (int16x4_t s, int field);
38221     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
38222     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
38223     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
38224     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
38225     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
38226     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
38227     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
38228     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
38229     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
38230     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
38231     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
38232     int16x4_t pminsh (int16x4_t s, int16x4_t t);
38233     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
38234     uint8x8_t pmovmskb_u (uint8x8_t s);
38235     int8x8_t pmovmskb_s (int8x8_t s);
38236     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
38237     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
38238     int16x4_t pmullh (int16x4_t s, int16x4_t t);
38239     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
38240     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
38241     uint16x4_t biadd (uint8x8_t s);
38242     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
38243     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
38244     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
38245     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
38246     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
38247     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
38248     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
38249     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
38250     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
38251     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
38252     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
38253     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
38254     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
38255     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
38256     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
38257     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
38258     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
38259     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
38260     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
38261     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
38262     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
38263     uint64_t psubd_u (uint64_t s, uint64_t t);
38264     int64_t psubd_s (int64_t s, int64_t t);
38265     int16x4_t psubsh (int16x4_t s, int16x4_t t);
38266     int8x8_t psubsb (int8x8_t s, int8x8_t t);
38267     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
38268     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
38269     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
38270     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
38271     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
38272     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
38273     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
38274     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
38275     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
38276     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
38277     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
38278     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
38279     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
38280     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
38281
38282* Menu:
38283
38284* Paired-Single Arithmetic::
38285* Paired-Single Built-in Functions::
38286* MIPS-3D Built-in Functions::
38287
38288
38289File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38290
382916.56.11.1 Paired-Single Arithmetic
38292..................................
38293
38294The table below lists the 'v2sf' operations for which hardware support
38295exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
38296value.
38297
38298C code                               MIPS instruction
38299'a + b'                              'add.ps'
38300'a - b'                              'sub.ps'
38301'-a'                                 'neg.ps'
38302'a * b'                              'mul.ps'
38303'a * b + c'                          'madd.ps'
38304'a * b - c'                          'msub.ps'
38305'-(a * b + c)'                       'nmadd.ps'
38306'-(a * b - c)'                       'nmsub.ps'
38307'x ? a : b'                          'movn.ps'/'movz.ps'
38308
38309 Note that the multiply-accumulate instructions can be disabled using
38310the command-line option '-mno-fused-madd'.
38311
38312
38313File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
38314
383156.56.11.2 Paired-Single Built-in Functions
38316..........................................
38317
38318The following paired-single functions map directly to a particular MIPS
38319instruction.  Please refer to the architecture specification for details
38320on what each instruction does.
38321
38322'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
38323     Pair lower lower ('pll.ps').
38324
38325'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
38326     Pair upper lower ('pul.ps').
38327
38328'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
38329     Pair lower upper ('plu.ps').
38330
38331'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
38332     Pair upper upper ('puu.ps').
38333
38334'v2sf __builtin_mips_cvt_ps_s (float, float)'
38335     Convert pair to paired single ('cvt.ps.s').
38336
38337'float __builtin_mips_cvt_s_pl (v2sf)'
38338     Convert pair lower to single ('cvt.s.pl').
38339
38340'float __builtin_mips_cvt_s_pu (v2sf)'
38341     Convert pair upper to single ('cvt.s.pu').
38342
38343'v2sf __builtin_mips_abs_ps (v2sf)'
38344     Absolute value ('abs.ps').
38345
38346'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
38347     Align variable ('alnv.ps').
38348
38349     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
38350     otherwise the result is unpredictable.  Please read the instruction
38351     description for details.
38352
38353 The following multi-instruction functions are also available.  In each
38354case, COND can be any of the 16 floating-point conditions: 'f', 'un',
38355'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
38356'lt', 'nge', 'le' or 'ngt'.
38357
38358'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38359'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38360     Conditional move based on floating-point comparison ('c.COND.ps',
38361     'movt.ps'/'movf.ps').
38362
38363     The 'movt' functions return the value X computed by:
38364
38365          c.COND.ps CC,A,B
38366          mov.ps X,C
38367          movt.ps X,D,CC
38368
38369     The 'movf' functions are similar but use 'movf.ps' instead of
38370     'movt.ps'.
38371
38372'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
38373'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
38374     Comparison of two paired-single values ('c.COND.ps',
38375     'bc1t'/'bc1f').
38376
38377     These functions compare A and B using 'c.COND.ps' and return either
38378     the upper or lower half of the result.  For example:
38379
38380          v2sf a, b;
38381          if (__builtin_mips_upper_c_eq_ps (a, b))
38382            upper_halves_are_equal ();
38383          else
38384            upper_halves_are_unequal ();
38385
38386          if (__builtin_mips_lower_c_eq_ps (a, b))
38387            lower_halves_are_equal ();
38388          else
38389            lower_halves_are_unequal ();
38390
38391
38392File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38393
383946.56.11.3 MIPS-3D Built-in Functions
38395....................................
38396
38397The MIPS-3D Application-Specific Extension (ASE) includes additional
38398paired-single instructions that are designed to improve the performance
38399of 3D graphics operations.  Support for these instructions is controlled
38400by the '-mips3d' command-line option.
38401
38402 The functions listed below map directly to a particular MIPS-3D
38403instruction.  Please refer to the architecture specification for more
38404details on what each instruction does.
38405
38406'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
38407     Reduction add ('addr.ps').
38408
38409'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
38410     Reduction multiply ('mulr.ps').
38411
38412'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
38413     Convert paired single to paired word ('cvt.pw.ps').
38414
38415'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
38416     Convert paired word to paired single ('cvt.ps.pw').
38417
38418'float __builtin_mips_recip1_s (float)'
38419'double __builtin_mips_recip1_d (double)'
38420'v2sf __builtin_mips_recip1_ps (v2sf)'
38421     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
38422
38423'float __builtin_mips_recip2_s (float, float)'
38424'double __builtin_mips_recip2_d (double, double)'
38425'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
38426     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
38427
38428'float __builtin_mips_rsqrt1_s (float)'
38429'double __builtin_mips_rsqrt1_d (double)'
38430'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
38431     Reduced-precision reciprocal square root (sequence step 1)
38432     ('rsqrt1.FMT').
38433
38434'float __builtin_mips_rsqrt2_s (float, float)'
38435'double __builtin_mips_rsqrt2_d (double, double)'
38436'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
38437     Reduced-precision reciprocal square root (sequence step 2)
38438     ('rsqrt2.FMT').
38439
38440 The following multi-instruction functions are also available.  In each
38441case, COND can be any of the 16 floating-point conditions: 'f', 'un',
38442'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
38443'lt', 'nge', 'le' or 'ngt'.
38444
38445'int __builtin_mips_cabs_COND_s (float A, float B)'
38446'int __builtin_mips_cabs_COND_d (double A, double B)'
38447     Absolute comparison of two scalar values ('cabs.COND.FMT',
38448     'bc1t'/'bc1f').
38449
38450     These functions compare A and B using 'cabs.COND.s' or
38451     'cabs.COND.d' and return the result as a boolean value.  For
38452     example:
38453
38454          float a, b;
38455          if (__builtin_mips_cabs_eq_s (a, b))
38456            true ();
38457          else
38458            false ();
38459
38460'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
38461'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
38462     Absolute comparison of two paired-single values ('cabs.COND.ps',
38463     'bc1t'/'bc1f').
38464
38465     These functions compare A and B using 'cabs.COND.ps' and return
38466     either the upper or lower half of the result.  For example:
38467
38468          v2sf a, b;
38469          if (__builtin_mips_upper_cabs_eq_ps (a, b))
38470            upper_halves_are_equal ();
38471          else
38472            upper_halves_are_unequal ();
38473
38474          if (__builtin_mips_lower_cabs_eq_ps (a, b))
38475            lower_halves_are_equal ();
38476          else
38477            lower_halves_are_unequal ();
38478
38479'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38480'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38481     Conditional move based on absolute comparison ('cabs.COND.ps',
38482     'movt.ps'/'movf.ps').
38483
38484     The 'movt' functions return the value X computed by:
38485
38486          cabs.COND.ps CC,A,B
38487          mov.ps X,C
38488          movt.ps X,D,CC
38489
38490     The 'movf' functions are similar but use 'movf.ps' instead of
38491     'movt.ps'.
38492
38493'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
38494'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
38495'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
38496'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
38497     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
38498     'bc1any2t'/'bc1any2f').
38499
38500     These functions compare A and B using 'c.COND.ps' or
38501     'cabs.COND.ps'.  The 'any' forms return true if either result is
38502     true and the 'all' forms return true if both results are true.  For
38503     example:
38504
38505          v2sf a, b;
38506          if (__builtin_mips_any_c_eq_ps (a, b))
38507            one_is_true ();
38508          else
38509            both_are_false ();
38510
38511          if (__builtin_mips_all_c_eq_ps (a, b))
38512            both_are_true ();
38513          else
38514            one_is_false ();
38515
38516'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38517'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38518'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38519'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38520     Comparison of four paired-single values
38521     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
38522
38523     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
38524     B and to compare C with D.  The 'any' forms return true if any of
38525     the four results are true and the 'all' forms return true if all
38526     four results are true.  For example:
38527
38528          v2sf a, b, c, d;
38529          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
38530            some_are_true ();
38531          else
38532            all_are_false ();
38533
38534          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
38535            all_are_true ();
38536          else
38537            some_are_false ();
38538
38539
38540File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
38541
385426.56.12 Other MIPS Built-in Functions
38543-------------------------------------
38544
38545GCC provides other MIPS-specific built-in functions:
38546
38547'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
38548     Insert a 'cache' instruction with operands OP and ADDR.  GCC
38549     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
38550     when this function is available.
38551
38552
38553File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
38554
385556.56.13 picoChip Built-in Functions
38556-----------------------------------
38557
38558GCC provides an interface to selected machine instructions from the
38559picoChip instruction set.
38560
38561'int __builtin_sbc (int VALUE)'
38562     Sign bit count.  Return the number of consecutive bits in VALUE
38563     that have the same value as the sign bit.  The result is the number
38564     of leading sign bits minus one, giving the number of redundant sign
38565     bits in VALUE.
38566
38567'int __builtin_byteswap (int VALUE)'
38568     Byte swap.  Return the result of swapping the upper and lower bytes
38569     of VALUE.
38570
38571'int __builtin_brev (int VALUE)'
38572     Bit reversal.  Return the result of reversing the bits in VALUE.
38573     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
38574     on.
38575
38576'int __builtin_adds (int X, int Y)'
38577     Saturating addition.  Return the result of adding X and Y, storing
38578     the value 32767 if the result overflows.
38579
38580'int __builtin_subs (int X, int Y)'
38581     Saturating subtraction.  Return the result of subtracting Y from X,
38582     storing the value -32768 if the result overflows.
38583
38584'void __builtin_halt (void)'
38585     Halt.  The processor stops execution.  This built-in is useful for
38586     implementing assertions.
38587
38588
38589File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
38590
385916.56.14 PowerPC Built-in Functions
38592----------------------------------
38593
38594These built-in functions are available for the PowerPC family of
38595processors:
38596     float __builtin_recipdivf (float, float);
38597     float __builtin_rsqrtf (float);
38598     double __builtin_recipdiv (double, double);
38599     double __builtin_rsqrt (double);
38600     uint64_t __builtin_ppc_get_timebase ();
38601     unsigned long __builtin_ppc_mftb ();
38602     double __builtin_unpack_longdouble (long double, int);
38603     double __builtin_longdouble_dw0 (long double);
38604     double __builtin_longdouble_dw1 (long double);
38605     long double __builtin_pack_longdouble (double, double);
38606
38607 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
38608generate multiple instructions to implement the reciprocal sqrt
38609functionality using reciprocal sqrt estimate instructions.
38610
38611 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
38612multiple instructions to implement division using the reciprocal
38613estimate instructions.
38614
38615 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
38616generate instructions to read the Time Base Register.  The
38617'__builtin_ppc_get_timebase' function may generate multiple instructions
38618and always returns the 64 bits of the Time Base Register.  The
38619'__builtin_ppc_mftb' function always generates one instruction and
38620returns the Time Base Register value as an unsigned long, throwing away
38621the most significant word on 32-bit environments.
38622
38623 The following built-in functions are available for the PowerPC family
38624of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
38625'-mpopcntd'):
38626     long __builtin_bpermd (long, long);
38627     int __builtin_divwe (int, int);
38628     int __builtin_divweo (int, int);
38629     unsigned int __builtin_divweu (unsigned int, unsigned int);
38630     unsigned int __builtin_divweuo (unsigned int, unsigned int);
38631     long __builtin_divde (long, long);
38632     long __builtin_divdeo (long, long);
38633     unsigned long __builtin_divdeu (unsigned long, unsigned long);
38634     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
38635     unsigned int cdtbcd (unsigned int);
38636     unsigned int cbcdtd (unsigned int);
38637     unsigned int addg6s (unsigned int, unsigned int);
38638
38639 The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu',
38640'__builtin_divdeou' functions require a 64-bit environment support ISA
386412.06 or later.
38642
38643 The following built-in functions are available for the PowerPC family
38644of processors when hardware decimal floating point ('-mhard-dfp') is
38645available:
38646     _Decimal64 __builtin_dxex (_Decimal64);
38647     _Decimal128 __builtin_dxexq (_Decimal128);
38648     _Decimal64 __builtin_ddedpd (int, _Decimal64);
38649     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
38650     _Decimal64 __builtin_denbcd (int, _Decimal64);
38651     _Decimal128 __builtin_denbcdq (int, _Decimal128);
38652     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
38653     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
38654     _Decimal64 __builtin_dscli (_Decimal64, int);
38655     _Decimal128 __builitn_dscliq (_Decimal128, int);
38656     _Decimal64 __builtin_dscri (_Decimal64, int);
38657     _Decimal128 __builitn_dscriq (_Decimal128, int);
38658     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
38659     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
38660
38661 The following built-in functions are available for the PowerPC family
38662of processors when the Vector Scalar (vsx) instruction set is available:
38663     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
38664     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
38665                                                     unsigned long long);
38666
38667
38668File: 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
38669
386706.56.15 PowerPC AltiVec Built-in Functions
38671------------------------------------------
38672
38673GCC provides an interface for the PowerPC family of processors to access
38674the AltiVec operations described in Motorola's AltiVec Programming
38675Interface Manual.  The interface is made available by including
38676'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
38677supports the following vector types.
38678
38679     vector unsigned char
38680     vector signed char
38681     vector bool char
38682
38683     vector unsigned short
38684     vector signed short
38685     vector bool short
38686     vector pixel
38687
38688     vector unsigned int
38689     vector signed int
38690     vector bool int
38691     vector float
38692
38693 If '-mvsx' is used the following additional vector types are
38694implemented.
38695
38696     vector unsigned long
38697     vector signed long
38698     vector double
38699
38700 The long types are only implemented for 64-bit code generation, and the
38701long type is only used in the floating point/integer conversion
38702instructions.
38703
38704 GCC's implementation of the high-level language interface available
38705from C and C++ code differs from Motorola's documentation in several
38706ways.
38707
38708   * A vector constant is a list of constant expressions within curly
38709     braces.
38710
38711   * A vector initializer requires no cast if the vector constant is of
38712     the same type as the variable it is initializing.
38713
38714   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
38715     type is the default signedness of the base type.  The default
38716     varies depending on the operating system, so a portable program
38717     should always specify the signedness.
38718
38719   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
38720     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
38721     context-sensitive substitution of the keywords 'vector', 'pixel'
38722     and 'bool' is disabled.  To use them, you must include
38723     '<altivec.h>' instead.
38724
38725   * GCC allows using a 'typedef' name as the type specifier for a
38726     vector type.
38727
38728   * For C, overloaded functions are implemented with macros so the
38729     following does not work:
38730
38731            vec_add ((vector signed int){1, 2, 3, 4}, foo);
38732
38733     Since 'vec_add' is a macro, the vector constant in the example is
38734     treated as four separate arguments.  Wrap the entire argument in
38735     parentheses for this to work.
38736
38737 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
38738uses built-in functions to achieve the functionality in the
38739aforementioned header file, but they are not supported and are subject
38740to change without notice.
38741
38742 The following interfaces are supported for the generic and specific
38743AltiVec operations and the AltiVec predicates.  In cases where there is
38744a direct mapping between generic and specific operations, only the
38745generic names are shown here, although the specific operations can also
38746be used.
38747
38748 Arguments that are documented as 'const int' require literal integral
38749values within the range required for that operation.
38750
38751     vector signed char vec_abs (vector signed char);
38752     vector signed short vec_abs (vector signed short);
38753     vector signed int vec_abs (vector signed int);
38754     vector float vec_abs (vector float);
38755
38756     vector signed char vec_abss (vector signed char);
38757     vector signed short vec_abss (vector signed short);
38758     vector signed int vec_abss (vector signed int);
38759
38760     vector signed char vec_add (vector bool char, vector signed char);
38761     vector signed char vec_add (vector signed char, vector bool char);
38762     vector signed char vec_add (vector signed char, vector signed char);
38763     vector unsigned char vec_add (vector bool char, vector unsigned char);
38764     vector unsigned char vec_add (vector unsigned char, vector bool char);
38765     vector unsigned char vec_add (vector unsigned char,
38766                                   vector unsigned char);
38767     vector signed short vec_add (vector bool short, vector signed short);
38768     vector signed short vec_add (vector signed short, vector bool short);
38769     vector signed short vec_add (vector signed short, vector signed short);
38770     vector unsigned short vec_add (vector bool short,
38771                                    vector unsigned short);
38772     vector unsigned short vec_add (vector unsigned short,
38773                                    vector bool short);
38774     vector unsigned short vec_add (vector unsigned short,
38775                                    vector unsigned short);
38776     vector signed int vec_add (vector bool int, vector signed int);
38777     vector signed int vec_add (vector signed int, vector bool int);
38778     vector signed int vec_add (vector signed int, vector signed int);
38779     vector unsigned int vec_add (vector bool int, vector unsigned int);
38780     vector unsigned int vec_add (vector unsigned int, vector bool int);
38781     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
38782     vector float vec_add (vector float, vector float);
38783
38784     vector float vec_vaddfp (vector float, vector float);
38785
38786     vector signed int vec_vadduwm (vector bool int, vector signed int);
38787     vector signed int vec_vadduwm (vector signed int, vector bool int);
38788     vector signed int vec_vadduwm (vector signed int, vector signed int);
38789     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
38790     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
38791     vector unsigned int vec_vadduwm (vector unsigned int,
38792                                      vector unsigned int);
38793
38794     vector signed short vec_vadduhm (vector bool short,
38795                                      vector signed short);
38796     vector signed short vec_vadduhm (vector signed short,
38797                                      vector bool short);
38798     vector signed short vec_vadduhm (vector signed short,
38799                                      vector signed short);
38800     vector unsigned short vec_vadduhm (vector bool short,
38801                                        vector unsigned short);
38802     vector unsigned short vec_vadduhm (vector unsigned short,
38803                                        vector bool short);
38804     vector unsigned short vec_vadduhm (vector unsigned short,
38805                                        vector unsigned short);
38806
38807     vector signed char vec_vaddubm (vector bool char, vector signed char);
38808     vector signed char vec_vaddubm (vector signed char, vector bool char);
38809     vector signed char vec_vaddubm (vector signed char, vector signed char);
38810     vector unsigned char vec_vaddubm (vector bool char,
38811                                       vector unsigned char);
38812     vector unsigned char vec_vaddubm (vector unsigned char,
38813                                       vector bool char);
38814     vector unsigned char vec_vaddubm (vector unsigned char,
38815                                       vector unsigned char);
38816
38817     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
38818
38819     vector unsigned char vec_adds (vector bool char, vector unsigned char);
38820     vector unsigned char vec_adds (vector unsigned char, vector bool char);
38821     vector unsigned char vec_adds (vector unsigned char,
38822                                    vector unsigned char);
38823     vector signed char vec_adds (vector bool char, vector signed char);
38824     vector signed char vec_adds (vector signed char, vector bool char);
38825     vector signed char vec_adds (vector signed char, vector signed char);
38826     vector unsigned short vec_adds (vector bool short,
38827                                     vector unsigned short);
38828     vector unsigned short vec_adds (vector unsigned short,
38829                                     vector bool short);
38830     vector unsigned short vec_adds (vector unsigned short,
38831                                     vector unsigned short);
38832     vector signed short vec_adds (vector bool short, vector signed short);
38833     vector signed short vec_adds (vector signed short, vector bool short);
38834     vector signed short vec_adds (vector signed short, vector signed short);
38835     vector unsigned int vec_adds (vector bool int, vector unsigned int);
38836     vector unsigned int vec_adds (vector unsigned int, vector bool int);
38837     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
38838     vector signed int vec_adds (vector bool int, vector signed int);
38839     vector signed int vec_adds (vector signed int, vector bool int);
38840     vector signed int vec_adds (vector signed int, vector signed int);
38841
38842     vector signed int vec_vaddsws (vector bool int, vector signed int);
38843     vector signed int vec_vaddsws (vector signed int, vector bool int);
38844     vector signed int vec_vaddsws (vector signed int, vector signed int);
38845
38846     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
38847     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
38848     vector unsigned int vec_vadduws (vector unsigned int,
38849                                      vector unsigned int);
38850
38851     vector signed short vec_vaddshs (vector bool short,
38852                                      vector signed short);
38853     vector signed short vec_vaddshs (vector signed short,
38854                                      vector bool short);
38855     vector signed short vec_vaddshs (vector signed short,
38856                                      vector signed short);
38857
38858     vector unsigned short vec_vadduhs (vector bool short,
38859                                        vector unsigned short);
38860     vector unsigned short vec_vadduhs (vector unsigned short,
38861                                        vector bool short);
38862     vector unsigned short vec_vadduhs (vector unsigned short,
38863                                        vector unsigned short);
38864
38865     vector signed char vec_vaddsbs (vector bool char, vector signed char);
38866     vector signed char vec_vaddsbs (vector signed char, vector bool char);
38867     vector signed char vec_vaddsbs (vector signed char, vector signed char);
38868
38869     vector unsigned char vec_vaddubs (vector bool char,
38870                                       vector unsigned char);
38871     vector unsigned char vec_vaddubs (vector unsigned char,
38872                                       vector bool char);
38873     vector unsigned char vec_vaddubs (vector unsigned char,
38874                                       vector unsigned char);
38875
38876     vector float vec_and (vector float, vector float);
38877     vector float vec_and (vector float, vector bool int);
38878     vector float vec_and (vector bool int, vector float);
38879     vector bool int vec_and (vector bool int, vector bool int);
38880     vector signed int vec_and (vector bool int, vector signed int);
38881     vector signed int vec_and (vector signed int, vector bool int);
38882     vector signed int vec_and (vector signed int, vector signed int);
38883     vector unsigned int vec_and (vector bool int, vector unsigned int);
38884     vector unsigned int vec_and (vector unsigned int, vector bool int);
38885     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
38886     vector bool short vec_and (vector bool short, vector bool short);
38887     vector signed short vec_and (vector bool short, vector signed short);
38888     vector signed short vec_and (vector signed short, vector bool short);
38889     vector signed short vec_and (vector signed short, vector signed short);
38890     vector unsigned short vec_and (vector bool short,
38891                                    vector unsigned short);
38892     vector unsigned short vec_and (vector unsigned short,
38893                                    vector bool short);
38894     vector unsigned short vec_and (vector unsigned short,
38895                                    vector unsigned short);
38896     vector signed char vec_and (vector bool char, vector signed char);
38897     vector bool char vec_and (vector bool char, vector bool char);
38898     vector signed char vec_and (vector signed char, vector bool char);
38899     vector signed char vec_and (vector signed char, vector signed char);
38900     vector unsigned char vec_and (vector bool char, vector unsigned char);
38901     vector unsigned char vec_and (vector unsigned char, vector bool char);
38902     vector unsigned char vec_and (vector unsigned char,
38903                                   vector unsigned char);
38904
38905     vector float vec_andc (vector float, vector float);
38906     vector float vec_andc (vector float, vector bool int);
38907     vector float vec_andc (vector bool int, vector float);
38908     vector bool int vec_andc (vector bool int, vector bool int);
38909     vector signed int vec_andc (vector bool int, vector signed int);
38910     vector signed int vec_andc (vector signed int, vector bool int);
38911     vector signed int vec_andc (vector signed int, vector signed int);
38912     vector unsigned int vec_andc (vector bool int, vector unsigned int);
38913     vector unsigned int vec_andc (vector unsigned int, vector bool int);
38914     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
38915     vector bool short vec_andc (vector bool short, vector bool short);
38916     vector signed short vec_andc (vector bool short, vector signed short);
38917     vector signed short vec_andc (vector signed short, vector bool short);
38918     vector signed short vec_andc (vector signed short, vector signed short);
38919     vector unsigned short vec_andc (vector bool short,
38920                                     vector unsigned short);
38921     vector unsigned short vec_andc (vector unsigned short,
38922                                     vector bool short);
38923     vector unsigned short vec_andc (vector unsigned short,
38924                                     vector unsigned short);
38925     vector signed char vec_andc (vector bool char, vector signed char);
38926     vector bool char vec_andc (vector bool char, vector bool char);
38927     vector signed char vec_andc (vector signed char, vector bool char);
38928     vector signed char vec_andc (vector signed char, vector signed char);
38929     vector unsigned char vec_andc (vector bool char, vector unsigned char);
38930     vector unsigned char vec_andc (vector unsigned char, vector bool char);
38931     vector unsigned char vec_andc (vector unsigned char,
38932                                    vector unsigned char);
38933
38934     vector unsigned char vec_avg (vector unsigned char,
38935                                   vector unsigned char);
38936     vector signed char vec_avg (vector signed char, vector signed char);
38937     vector unsigned short vec_avg (vector unsigned short,
38938                                    vector unsigned short);
38939     vector signed short vec_avg (vector signed short, vector signed short);
38940     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
38941     vector signed int vec_avg (vector signed int, vector signed int);
38942
38943     vector signed int vec_vavgsw (vector signed int, vector signed int);
38944
38945     vector unsigned int vec_vavguw (vector unsigned int,
38946                                     vector unsigned int);
38947
38948     vector signed short vec_vavgsh (vector signed short,
38949                                     vector signed short);
38950
38951     vector unsigned short vec_vavguh (vector unsigned short,
38952                                       vector unsigned short);
38953
38954     vector signed char vec_vavgsb (vector signed char, vector signed char);
38955
38956     vector unsigned char vec_vavgub (vector unsigned char,
38957                                      vector unsigned char);
38958
38959     vector float vec_copysign (vector float);
38960
38961     vector float vec_ceil (vector float);
38962
38963     vector signed int vec_cmpb (vector float, vector float);
38964
38965     vector bool char vec_cmpeq (vector signed char, vector signed char);
38966     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
38967     vector bool short vec_cmpeq (vector signed short, vector signed short);
38968     vector bool short vec_cmpeq (vector unsigned short,
38969                                  vector unsigned short);
38970     vector bool int vec_cmpeq (vector signed int, vector signed int);
38971     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
38972     vector bool int vec_cmpeq (vector float, vector float);
38973
38974     vector bool int vec_vcmpeqfp (vector float, vector float);
38975
38976     vector bool int vec_vcmpequw (vector signed int, vector signed int);
38977     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
38978
38979     vector bool short vec_vcmpequh (vector signed short,
38980                                     vector signed short);
38981     vector bool short vec_vcmpequh (vector unsigned short,
38982                                     vector unsigned short);
38983
38984     vector bool char vec_vcmpequb (vector signed char, vector signed char);
38985     vector bool char vec_vcmpequb (vector unsigned char,
38986                                    vector unsigned char);
38987
38988     vector bool int vec_cmpge (vector float, vector float);
38989
38990     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
38991     vector bool char vec_cmpgt (vector signed char, vector signed char);
38992     vector bool short vec_cmpgt (vector unsigned short,
38993                                  vector unsigned short);
38994     vector bool short vec_cmpgt (vector signed short, vector signed short);
38995     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
38996     vector bool int vec_cmpgt (vector signed int, vector signed int);
38997     vector bool int vec_cmpgt (vector float, vector float);
38998
38999     vector bool int vec_vcmpgtfp (vector float, vector float);
39000
39001     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
39002
39003     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
39004
39005     vector bool short vec_vcmpgtsh (vector signed short,
39006                                     vector signed short);
39007
39008     vector bool short vec_vcmpgtuh (vector unsigned short,
39009                                     vector unsigned short);
39010
39011     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
39012
39013     vector bool char vec_vcmpgtub (vector unsigned char,
39014                                    vector unsigned char);
39015
39016     vector bool int vec_cmple (vector float, vector float);
39017
39018     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
39019     vector bool char vec_cmplt (vector signed char, vector signed char);
39020     vector bool short vec_cmplt (vector unsigned short,
39021                                  vector unsigned short);
39022     vector bool short vec_cmplt (vector signed short, vector signed short);
39023     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
39024     vector bool int vec_cmplt (vector signed int, vector signed int);
39025     vector bool int vec_cmplt (vector float, vector float);
39026
39027     vector float vec_ctf (vector unsigned int, const int);
39028     vector float vec_ctf (vector signed int, const int);
39029
39030     vector float vec_vcfsx (vector signed int, const int);
39031
39032     vector float vec_vcfux (vector unsigned int, const int);
39033
39034     vector signed int vec_cts (vector float, const int);
39035
39036     vector unsigned int vec_ctu (vector float, const int);
39037
39038     void vec_dss (const int);
39039
39040     void vec_dssall (void);
39041
39042     void vec_dst (const vector unsigned char *, int, const int);
39043     void vec_dst (const vector signed char *, int, const int);
39044     void vec_dst (const vector bool char *, int, const int);
39045     void vec_dst (const vector unsigned short *, int, const int);
39046     void vec_dst (const vector signed short *, int, const int);
39047     void vec_dst (const vector bool short *, int, const int);
39048     void vec_dst (const vector pixel *, int, const int);
39049     void vec_dst (const vector unsigned int *, int, const int);
39050     void vec_dst (const vector signed int *, int, const int);
39051     void vec_dst (const vector bool int *, int, const int);
39052     void vec_dst (const vector float *, int, const int);
39053     void vec_dst (const unsigned char *, int, const int);
39054     void vec_dst (const signed char *, int, const int);
39055     void vec_dst (const unsigned short *, int, const int);
39056     void vec_dst (const short *, int, const int);
39057     void vec_dst (const unsigned int *, int, const int);
39058     void vec_dst (const int *, int, const int);
39059     void vec_dst (const unsigned long *, int, const int);
39060     void vec_dst (const long *, int, const int);
39061     void vec_dst (const float *, int, const int);
39062
39063     void vec_dstst (const vector unsigned char *, int, const int);
39064     void vec_dstst (const vector signed char *, int, const int);
39065     void vec_dstst (const vector bool char *, int, const int);
39066     void vec_dstst (const vector unsigned short *, int, const int);
39067     void vec_dstst (const vector signed short *, int, const int);
39068     void vec_dstst (const vector bool short *, int, const int);
39069     void vec_dstst (const vector pixel *, int, const int);
39070     void vec_dstst (const vector unsigned int *, int, const int);
39071     void vec_dstst (const vector signed int *, int, const int);
39072     void vec_dstst (const vector bool int *, int, const int);
39073     void vec_dstst (const vector float *, int, const int);
39074     void vec_dstst (const unsigned char *, int, const int);
39075     void vec_dstst (const signed char *, int, const int);
39076     void vec_dstst (const unsigned short *, int, const int);
39077     void vec_dstst (const short *, int, const int);
39078     void vec_dstst (const unsigned int *, int, const int);
39079     void vec_dstst (const int *, int, const int);
39080     void vec_dstst (const unsigned long *, int, const int);
39081     void vec_dstst (const long *, int, const int);
39082     void vec_dstst (const float *, int, const int);
39083
39084     void vec_dststt (const vector unsigned char *, int, const int);
39085     void vec_dststt (const vector signed char *, int, const int);
39086     void vec_dststt (const vector bool char *, int, const int);
39087     void vec_dststt (const vector unsigned short *, int, const int);
39088     void vec_dststt (const vector signed short *, int, const int);
39089     void vec_dststt (const vector bool short *, int, const int);
39090     void vec_dststt (const vector pixel *, int, const int);
39091     void vec_dststt (const vector unsigned int *, int, const int);
39092     void vec_dststt (const vector signed int *, int, const int);
39093     void vec_dststt (const vector bool int *, int, const int);
39094     void vec_dststt (const vector float *, int, const int);
39095     void vec_dststt (const unsigned char *, int, const int);
39096     void vec_dststt (const signed char *, int, const int);
39097     void vec_dststt (const unsigned short *, int, const int);
39098     void vec_dststt (const short *, int, const int);
39099     void vec_dststt (const unsigned int *, int, const int);
39100     void vec_dststt (const int *, int, const int);
39101     void vec_dststt (const unsigned long *, int, const int);
39102     void vec_dststt (const long *, int, const int);
39103     void vec_dststt (const float *, int, const int);
39104
39105     void vec_dstt (const vector unsigned char *, int, const int);
39106     void vec_dstt (const vector signed char *, int, const int);
39107     void vec_dstt (const vector bool char *, int, const int);
39108     void vec_dstt (const vector unsigned short *, int, const int);
39109     void vec_dstt (const vector signed short *, int, const int);
39110     void vec_dstt (const vector bool short *, int, const int);
39111     void vec_dstt (const vector pixel *, int, const int);
39112     void vec_dstt (const vector unsigned int *, int, const int);
39113     void vec_dstt (const vector signed int *, int, const int);
39114     void vec_dstt (const vector bool int *, int, const int);
39115     void vec_dstt (const vector float *, int, const int);
39116     void vec_dstt (const unsigned char *, int, const int);
39117     void vec_dstt (const signed char *, int, const int);
39118     void vec_dstt (const unsigned short *, int, const int);
39119     void vec_dstt (const short *, int, const int);
39120     void vec_dstt (const unsigned int *, int, const int);
39121     void vec_dstt (const int *, int, const int);
39122     void vec_dstt (const unsigned long *, int, const int);
39123     void vec_dstt (const long *, int, const int);
39124     void vec_dstt (const float *, int, const int);
39125
39126     vector float vec_expte (vector float);
39127
39128     vector float vec_floor (vector float);
39129
39130     vector float vec_ld (int, const vector float *);
39131     vector float vec_ld (int, const float *);
39132     vector bool int vec_ld (int, const vector bool int *);
39133     vector signed int vec_ld (int, const vector signed int *);
39134     vector signed int vec_ld (int, const int *);
39135     vector signed int vec_ld (int, const long *);
39136     vector unsigned int vec_ld (int, const vector unsigned int *);
39137     vector unsigned int vec_ld (int, const unsigned int *);
39138     vector unsigned int vec_ld (int, const unsigned long *);
39139     vector bool short vec_ld (int, const vector bool short *);
39140     vector pixel vec_ld (int, const vector pixel *);
39141     vector signed short vec_ld (int, const vector signed short *);
39142     vector signed short vec_ld (int, const short *);
39143     vector unsigned short vec_ld (int, const vector unsigned short *);
39144     vector unsigned short vec_ld (int, const unsigned short *);
39145     vector bool char vec_ld (int, const vector bool char *);
39146     vector signed char vec_ld (int, const vector signed char *);
39147     vector signed char vec_ld (int, const signed char *);
39148     vector unsigned char vec_ld (int, const vector unsigned char *);
39149     vector unsigned char vec_ld (int, const unsigned char *);
39150
39151     vector signed char vec_lde (int, const signed char *);
39152     vector unsigned char vec_lde (int, const unsigned char *);
39153     vector signed short vec_lde (int, const short *);
39154     vector unsigned short vec_lde (int, const unsigned short *);
39155     vector float vec_lde (int, const float *);
39156     vector signed int vec_lde (int, const int *);
39157     vector unsigned int vec_lde (int, const unsigned int *);
39158     vector signed int vec_lde (int, const long *);
39159     vector unsigned int vec_lde (int, const unsigned long *);
39160
39161     vector float vec_lvewx (int, float *);
39162     vector signed int vec_lvewx (int, int *);
39163     vector unsigned int vec_lvewx (int, unsigned int *);
39164     vector signed int vec_lvewx (int, long *);
39165     vector unsigned int vec_lvewx (int, unsigned long *);
39166
39167     vector signed short vec_lvehx (int, short *);
39168     vector unsigned short vec_lvehx (int, unsigned short *);
39169
39170     vector signed char vec_lvebx (int, char *);
39171     vector unsigned char vec_lvebx (int, unsigned char *);
39172
39173     vector float vec_ldl (int, const vector float *);
39174     vector float vec_ldl (int, const float *);
39175     vector bool int vec_ldl (int, const vector bool int *);
39176     vector signed int vec_ldl (int, const vector signed int *);
39177     vector signed int vec_ldl (int, const int *);
39178     vector signed int vec_ldl (int, const long *);
39179     vector unsigned int vec_ldl (int, const vector unsigned int *);
39180     vector unsigned int vec_ldl (int, const unsigned int *);
39181     vector unsigned int vec_ldl (int, const unsigned long *);
39182     vector bool short vec_ldl (int, const vector bool short *);
39183     vector pixel vec_ldl (int, const vector pixel *);
39184     vector signed short vec_ldl (int, const vector signed short *);
39185     vector signed short vec_ldl (int, const short *);
39186     vector unsigned short vec_ldl (int, const vector unsigned short *);
39187     vector unsigned short vec_ldl (int, const unsigned short *);
39188     vector bool char vec_ldl (int, const vector bool char *);
39189     vector signed char vec_ldl (int, const vector signed char *);
39190     vector signed char vec_ldl (int, const signed char *);
39191     vector unsigned char vec_ldl (int, const vector unsigned char *);
39192     vector unsigned char vec_ldl (int, const unsigned char *);
39193
39194     vector float vec_loge (vector float);
39195
39196     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
39197     vector unsigned char vec_lvsl (int, const volatile signed char *);
39198     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
39199     vector unsigned char vec_lvsl (int, const volatile short *);
39200     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
39201     vector unsigned char vec_lvsl (int, const volatile int *);
39202     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
39203     vector unsigned char vec_lvsl (int, const volatile long *);
39204     vector unsigned char vec_lvsl (int, const volatile float *);
39205
39206     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
39207     vector unsigned char vec_lvsr (int, const volatile signed char *);
39208     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
39209     vector unsigned char vec_lvsr (int, const volatile short *);
39210     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
39211     vector unsigned char vec_lvsr (int, const volatile int *);
39212     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
39213     vector unsigned char vec_lvsr (int, const volatile long *);
39214     vector unsigned char vec_lvsr (int, const volatile float *);
39215
39216     vector float vec_madd (vector float, vector float, vector float);
39217
39218     vector signed short vec_madds (vector signed short,
39219                                    vector signed short,
39220                                    vector signed short);
39221
39222     vector unsigned char vec_max (vector bool char, vector unsigned char);
39223     vector unsigned char vec_max (vector unsigned char, vector bool char);
39224     vector unsigned char vec_max (vector unsigned char,
39225                                   vector unsigned char);
39226     vector signed char vec_max (vector bool char, vector signed char);
39227     vector signed char vec_max (vector signed char, vector bool char);
39228     vector signed char vec_max (vector signed char, vector signed char);
39229     vector unsigned short vec_max (vector bool short,
39230                                    vector unsigned short);
39231     vector unsigned short vec_max (vector unsigned short,
39232                                    vector bool short);
39233     vector unsigned short vec_max (vector unsigned short,
39234                                    vector unsigned short);
39235     vector signed short vec_max (vector bool short, vector signed short);
39236     vector signed short vec_max (vector signed short, vector bool short);
39237     vector signed short vec_max (vector signed short, vector signed short);
39238     vector unsigned int vec_max (vector bool int, vector unsigned int);
39239     vector unsigned int vec_max (vector unsigned int, vector bool int);
39240     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
39241     vector signed int vec_max (vector bool int, vector signed int);
39242     vector signed int vec_max (vector signed int, vector bool int);
39243     vector signed int vec_max (vector signed int, vector signed int);
39244     vector float vec_max (vector float, vector float);
39245
39246     vector float vec_vmaxfp (vector float, vector float);
39247
39248     vector signed int vec_vmaxsw (vector bool int, vector signed int);
39249     vector signed int vec_vmaxsw (vector signed int, vector bool int);
39250     vector signed int vec_vmaxsw (vector signed int, vector signed int);
39251
39252     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
39253     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
39254     vector unsigned int vec_vmaxuw (vector unsigned int,
39255                                     vector unsigned int);
39256
39257     vector signed short vec_vmaxsh (vector bool short, vector signed short);
39258     vector signed short vec_vmaxsh (vector signed short, vector bool short);
39259     vector signed short vec_vmaxsh (vector signed short,
39260                                     vector signed short);
39261
39262     vector unsigned short vec_vmaxuh (vector bool short,
39263                                       vector unsigned short);
39264     vector unsigned short vec_vmaxuh (vector unsigned short,
39265                                       vector bool short);
39266     vector unsigned short vec_vmaxuh (vector unsigned short,
39267                                       vector unsigned short);
39268
39269     vector signed char vec_vmaxsb (vector bool char, vector signed char);
39270     vector signed char vec_vmaxsb (vector signed char, vector bool char);
39271     vector signed char vec_vmaxsb (vector signed char, vector signed char);
39272
39273     vector unsigned char vec_vmaxub (vector bool char,
39274                                      vector unsigned char);
39275     vector unsigned char vec_vmaxub (vector unsigned char,
39276                                      vector bool char);
39277     vector unsigned char vec_vmaxub (vector unsigned char,
39278                                      vector unsigned char);
39279
39280     vector bool char vec_mergeh (vector bool char, vector bool char);
39281     vector signed char vec_mergeh (vector signed char, vector signed char);
39282     vector unsigned char vec_mergeh (vector unsigned char,
39283                                      vector unsigned char);
39284     vector bool short vec_mergeh (vector bool short, vector bool short);
39285     vector pixel vec_mergeh (vector pixel, vector pixel);
39286     vector signed short vec_mergeh (vector signed short,
39287                                     vector signed short);
39288     vector unsigned short vec_mergeh (vector unsigned short,
39289                                       vector unsigned short);
39290     vector float vec_mergeh (vector float, vector float);
39291     vector bool int vec_mergeh (vector bool int, vector bool int);
39292     vector signed int vec_mergeh (vector signed int, vector signed int);
39293     vector unsigned int vec_mergeh (vector unsigned int,
39294                                     vector unsigned int);
39295
39296     vector float vec_vmrghw (vector float, vector float);
39297     vector bool int vec_vmrghw (vector bool int, vector bool int);
39298     vector signed int vec_vmrghw (vector signed int, vector signed int);
39299     vector unsigned int vec_vmrghw (vector unsigned int,
39300                                     vector unsigned int);
39301
39302     vector bool short vec_vmrghh (vector bool short, vector bool short);
39303     vector signed short vec_vmrghh (vector signed short,
39304                                     vector signed short);
39305     vector unsigned short vec_vmrghh (vector unsigned short,
39306                                       vector unsigned short);
39307     vector pixel vec_vmrghh (vector pixel, vector pixel);
39308
39309     vector bool char vec_vmrghb (vector bool char, vector bool char);
39310     vector signed char vec_vmrghb (vector signed char, vector signed char);
39311     vector unsigned char vec_vmrghb (vector unsigned char,
39312                                      vector unsigned char);
39313
39314     vector bool char vec_mergel (vector bool char, vector bool char);
39315     vector signed char vec_mergel (vector signed char, vector signed char);
39316     vector unsigned char vec_mergel (vector unsigned char,
39317                                      vector unsigned char);
39318     vector bool short vec_mergel (vector bool short, vector bool short);
39319     vector pixel vec_mergel (vector pixel, vector pixel);
39320     vector signed short vec_mergel (vector signed short,
39321                                     vector signed short);
39322     vector unsigned short vec_mergel (vector unsigned short,
39323                                       vector unsigned short);
39324     vector float vec_mergel (vector float, vector float);
39325     vector bool int vec_mergel (vector bool int, vector bool int);
39326     vector signed int vec_mergel (vector signed int, vector signed int);
39327     vector unsigned int vec_mergel (vector unsigned int,
39328                                     vector unsigned int);
39329
39330     vector float vec_vmrglw (vector float, vector float);
39331     vector signed int vec_vmrglw (vector signed int, vector signed int);
39332     vector unsigned int vec_vmrglw (vector unsigned int,
39333                                     vector unsigned int);
39334     vector bool int vec_vmrglw (vector bool int, vector bool int);
39335
39336     vector bool short vec_vmrglh (vector bool short, vector bool short);
39337     vector signed short vec_vmrglh (vector signed short,
39338                                     vector signed short);
39339     vector unsigned short vec_vmrglh (vector unsigned short,
39340                                       vector unsigned short);
39341     vector pixel vec_vmrglh (vector pixel, vector pixel);
39342
39343     vector bool char vec_vmrglb (vector bool char, vector bool char);
39344     vector signed char vec_vmrglb (vector signed char, vector signed char);
39345     vector unsigned char vec_vmrglb (vector unsigned char,
39346                                      vector unsigned char);
39347
39348     vector unsigned short vec_mfvscr (void);
39349
39350     vector unsigned char vec_min (vector bool char, vector unsigned char);
39351     vector unsigned char vec_min (vector unsigned char, vector bool char);
39352     vector unsigned char vec_min (vector unsigned char,
39353                                   vector unsigned char);
39354     vector signed char vec_min (vector bool char, vector signed char);
39355     vector signed char vec_min (vector signed char, vector bool char);
39356     vector signed char vec_min (vector signed char, vector signed char);
39357     vector unsigned short vec_min (vector bool short,
39358                                    vector unsigned short);
39359     vector unsigned short vec_min (vector unsigned short,
39360                                    vector bool short);
39361     vector unsigned short vec_min (vector unsigned short,
39362                                    vector unsigned short);
39363     vector signed short vec_min (vector bool short, vector signed short);
39364     vector signed short vec_min (vector signed short, vector bool short);
39365     vector signed short vec_min (vector signed short, vector signed short);
39366     vector unsigned int vec_min (vector bool int, vector unsigned int);
39367     vector unsigned int vec_min (vector unsigned int, vector bool int);
39368     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
39369     vector signed int vec_min (vector bool int, vector signed int);
39370     vector signed int vec_min (vector signed int, vector bool int);
39371     vector signed int vec_min (vector signed int, vector signed int);
39372     vector float vec_min (vector float, vector float);
39373
39374     vector float vec_vminfp (vector float, vector float);
39375
39376     vector signed int vec_vminsw (vector bool int, vector signed int);
39377     vector signed int vec_vminsw (vector signed int, vector bool int);
39378     vector signed int vec_vminsw (vector signed int, vector signed int);
39379
39380     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
39381     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
39382     vector unsigned int vec_vminuw (vector unsigned int,
39383                                     vector unsigned int);
39384
39385     vector signed short vec_vminsh (vector bool short, vector signed short);
39386     vector signed short vec_vminsh (vector signed short, vector bool short);
39387     vector signed short vec_vminsh (vector signed short,
39388                                     vector signed short);
39389
39390     vector unsigned short vec_vminuh (vector bool short,
39391                                       vector unsigned short);
39392     vector unsigned short vec_vminuh (vector unsigned short,
39393                                       vector bool short);
39394     vector unsigned short vec_vminuh (vector unsigned short,
39395                                       vector unsigned short);
39396
39397     vector signed char vec_vminsb (vector bool char, vector signed char);
39398     vector signed char vec_vminsb (vector signed char, vector bool char);
39399     vector signed char vec_vminsb (vector signed char, vector signed char);
39400
39401     vector unsigned char vec_vminub (vector bool char,
39402                                      vector unsigned char);
39403     vector unsigned char vec_vminub (vector unsigned char,
39404                                      vector bool char);
39405     vector unsigned char vec_vminub (vector unsigned char,
39406                                      vector unsigned char);
39407
39408     vector signed short vec_mladd (vector signed short,
39409                                    vector signed short,
39410                                    vector signed short);
39411     vector signed short vec_mladd (vector signed short,
39412                                    vector unsigned short,
39413                                    vector unsigned short);
39414     vector signed short vec_mladd (vector unsigned short,
39415                                    vector signed short,
39416                                    vector signed short);
39417     vector unsigned short vec_mladd (vector unsigned short,
39418                                      vector unsigned short,
39419                                      vector unsigned short);
39420
39421     vector signed short vec_mradds (vector signed short,
39422                                     vector signed short,
39423                                     vector signed short);
39424
39425     vector unsigned int vec_msum (vector unsigned char,
39426                                   vector unsigned char,
39427                                   vector unsigned int);
39428     vector signed int vec_msum (vector signed char,
39429                                 vector unsigned char,
39430                                 vector signed int);
39431     vector unsigned int vec_msum (vector unsigned short,
39432                                   vector unsigned short,
39433                                   vector unsigned int);
39434     vector signed int vec_msum (vector signed short,
39435                                 vector signed short,
39436                                 vector signed int);
39437
39438     vector signed int vec_vmsumshm (vector signed short,
39439                                     vector signed short,
39440                                     vector signed int);
39441
39442     vector unsigned int vec_vmsumuhm (vector unsigned short,
39443                                       vector unsigned short,
39444                                       vector unsigned int);
39445
39446     vector signed int vec_vmsummbm (vector signed char,
39447                                     vector unsigned char,
39448                                     vector signed int);
39449
39450     vector unsigned int vec_vmsumubm (vector unsigned char,
39451                                       vector unsigned char,
39452                                       vector unsigned int);
39453
39454     vector unsigned int vec_msums (vector unsigned short,
39455                                    vector unsigned short,
39456                                    vector unsigned int);
39457     vector signed int vec_msums (vector signed short,
39458                                  vector signed short,
39459                                  vector signed int);
39460
39461     vector signed int vec_vmsumshs (vector signed short,
39462                                     vector signed short,
39463                                     vector signed int);
39464
39465     vector unsigned int vec_vmsumuhs (vector unsigned short,
39466                                       vector unsigned short,
39467                                       vector unsigned int);
39468
39469     void vec_mtvscr (vector signed int);
39470     void vec_mtvscr (vector unsigned int);
39471     void vec_mtvscr (vector bool int);
39472     void vec_mtvscr (vector signed short);
39473     void vec_mtvscr (vector unsigned short);
39474     void vec_mtvscr (vector bool short);
39475     void vec_mtvscr (vector pixel);
39476     void vec_mtvscr (vector signed char);
39477     void vec_mtvscr (vector unsigned char);
39478     void vec_mtvscr (vector bool char);
39479
39480     vector unsigned short vec_mule (vector unsigned char,
39481                                     vector unsigned char);
39482     vector signed short vec_mule (vector signed char,
39483                                   vector signed char);
39484     vector unsigned int vec_mule (vector unsigned short,
39485                                   vector unsigned short);
39486     vector signed int vec_mule (vector signed short, vector signed short);
39487
39488     vector signed int vec_vmulesh (vector signed short,
39489                                    vector signed short);
39490
39491     vector unsigned int vec_vmuleuh (vector unsigned short,
39492                                      vector unsigned short);
39493
39494     vector signed short vec_vmulesb (vector signed char,
39495                                      vector signed char);
39496
39497     vector unsigned short vec_vmuleub (vector unsigned char,
39498                                       vector unsigned char);
39499
39500     vector unsigned short vec_mulo (vector unsigned char,
39501                                     vector unsigned char);
39502     vector signed short vec_mulo (vector signed char, vector signed char);
39503     vector unsigned int vec_mulo (vector unsigned short,
39504                                   vector unsigned short);
39505     vector signed int vec_mulo (vector signed short, vector signed short);
39506
39507     vector signed int vec_vmulosh (vector signed short,
39508                                    vector signed short);
39509
39510     vector unsigned int vec_vmulouh (vector unsigned short,
39511                                      vector unsigned short);
39512
39513     vector signed short vec_vmulosb (vector signed char,
39514                                      vector signed char);
39515
39516     vector unsigned short vec_vmuloub (vector unsigned char,
39517                                        vector unsigned char);
39518
39519     vector float vec_nmsub (vector float, vector float, vector float);
39520
39521     vector float vec_nor (vector float, vector float);
39522     vector signed int vec_nor (vector signed int, vector signed int);
39523     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
39524     vector bool int vec_nor (vector bool int, vector bool int);
39525     vector signed short vec_nor (vector signed short, vector signed short);
39526     vector unsigned short vec_nor (vector unsigned short,
39527                                    vector unsigned short);
39528     vector bool short vec_nor (vector bool short, vector bool short);
39529     vector signed char vec_nor (vector signed char, vector signed char);
39530     vector unsigned char vec_nor (vector unsigned char,
39531                                   vector unsigned char);
39532     vector bool char vec_nor (vector bool char, vector bool char);
39533
39534     vector float vec_or (vector float, vector float);
39535     vector float vec_or (vector float, vector bool int);
39536     vector float vec_or (vector bool int, vector float);
39537     vector bool int vec_or (vector bool int, vector bool int);
39538     vector signed int vec_or (vector bool int, vector signed int);
39539     vector signed int vec_or (vector signed int, vector bool int);
39540     vector signed int vec_or (vector signed int, vector signed int);
39541     vector unsigned int vec_or (vector bool int, vector unsigned int);
39542     vector unsigned int vec_or (vector unsigned int, vector bool int);
39543     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
39544     vector bool short vec_or (vector bool short, vector bool short);
39545     vector signed short vec_or (vector bool short, vector signed short);
39546     vector signed short vec_or (vector signed short, vector bool short);
39547     vector signed short vec_or (vector signed short, vector signed short);
39548     vector unsigned short vec_or (vector bool short, vector unsigned short);
39549     vector unsigned short vec_or (vector unsigned short, vector bool short);
39550     vector unsigned short vec_or (vector unsigned short,
39551                                   vector unsigned short);
39552     vector signed char vec_or (vector bool char, vector signed char);
39553     vector bool char vec_or (vector bool char, vector bool char);
39554     vector signed char vec_or (vector signed char, vector bool char);
39555     vector signed char vec_or (vector signed char, vector signed char);
39556     vector unsigned char vec_or (vector bool char, vector unsigned char);
39557     vector unsigned char vec_or (vector unsigned char, vector bool char);
39558     vector unsigned char vec_or (vector unsigned char,
39559                                  vector unsigned char);
39560
39561     vector signed char vec_pack (vector signed short, vector signed short);
39562     vector unsigned char vec_pack (vector unsigned short,
39563                                    vector unsigned short);
39564     vector bool char vec_pack (vector bool short, vector bool short);
39565     vector signed short vec_pack (vector signed int, vector signed int);
39566     vector unsigned short vec_pack (vector unsigned int,
39567                                     vector unsigned int);
39568     vector bool short vec_pack (vector bool int, vector bool int);
39569
39570     vector bool short vec_vpkuwum (vector bool int, vector bool int);
39571     vector signed short vec_vpkuwum (vector signed int, vector signed int);
39572     vector unsigned short vec_vpkuwum (vector unsigned int,
39573                                        vector unsigned int);
39574
39575     vector bool char vec_vpkuhum (vector bool short, vector bool short);
39576     vector signed char vec_vpkuhum (vector signed short,
39577                                     vector signed short);
39578     vector unsigned char vec_vpkuhum (vector unsigned short,
39579                                       vector unsigned short);
39580
39581     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
39582
39583     vector unsigned char vec_packs (vector unsigned short,
39584                                     vector unsigned short);
39585     vector signed char vec_packs (vector signed short, vector signed short);
39586     vector unsigned short vec_packs (vector unsigned int,
39587                                      vector unsigned int);
39588     vector signed short vec_packs (vector signed int, vector signed int);
39589
39590     vector signed short vec_vpkswss (vector signed int, vector signed int);
39591
39592     vector unsigned short vec_vpkuwus (vector unsigned int,
39593                                        vector unsigned int);
39594
39595     vector signed char vec_vpkshss (vector signed short,
39596                                     vector signed short);
39597
39598     vector unsigned char vec_vpkuhus (vector unsigned short,
39599                                       vector unsigned short);
39600
39601     vector unsigned char vec_packsu (vector unsigned short,
39602                                      vector unsigned short);
39603     vector unsigned char vec_packsu (vector signed short,
39604                                      vector signed short);
39605     vector unsigned short vec_packsu (vector unsigned int,
39606                                       vector unsigned int);
39607     vector unsigned short vec_packsu (vector signed int, vector signed int);
39608
39609     vector unsigned short vec_vpkswus (vector signed int,
39610                                        vector signed int);
39611
39612     vector unsigned char vec_vpkshus (vector signed short,
39613                                       vector signed short);
39614
39615     vector float vec_perm (vector float,
39616                            vector float,
39617                            vector unsigned char);
39618     vector signed int vec_perm (vector signed int,
39619                                 vector signed int,
39620                                 vector unsigned char);
39621     vector unsigned int vec_perm (vector unsigned int,
39622                                   vector unsigned int,
39623                                   vector unsigned char);
39624     vector bool int vec_perm (vector bool int,
39625                               vector bool int,
39626                               vector unsigned char);
39627     vector signed short vec_perm (vector signed short,
39628                                   vector signed short,
39629                                   vector unsigned char);
39630     vector unsigned short vec_perm (vector unsigned short,
39631                                     vector unsigned short,
39632                                     vector unsigned char);
39633     vector bool short vec_perm (vector bool short,
39634                                 vector bool short,
39635                                 vector unsigned char);
39636     vector pixel vec_perm (vector pixel,
39637                            vector pixel,
39638                            vector unsigned char);
39639     vector signed char vec_perm (vector signed char,
39640                                  vector signed char,
39641                                  vector unsigned char);
39642     vector unsigned char vec_perm (vector unsigned char,
39643                                    vector unsigned char,
39644                                    vector unsigned char);
39645     vector bool char vec_perm (vector bool char,
39646                                vector bool char,
39647                                vector unsigned char);
39648
39649     vector float vec_re (vector float);
39650
39651     vector signed char vec_rl (vector signed char,
39652                                vector unsigned char);
39653     vector unsigned char vec_rl (vector unsigned char,
39654                                  vector unsigned char);
39655     vector signed short vec_rl (vector signed short, vector unsigned short);
39656     vector unsigned short vec_rl (vector unsigned short,
39657                                   vector unsigned short);
39658     vector signed int vec_rl (vector signed int, vector unsigned int);
39659     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
39660
39661     vector signed int vec_vrlw (vector signed int, vector unsigned int);
39662     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
39663
39664     vector signed short vec_vrlh (vector signed short,
39665                                   vector unsigned short);
39666     vector unsigned short vec_vrlh (vector unsigned short,
39667                                     vector unsigned short);
39668
39669     vector signed char vec_vrlb (vector signed char, vector unsigned char);
39670     vector unsigned char vec_vrlb (vector unsigned char,
39671                                    vector unsigned char);
39672
39673     vector float vec_round (vector float);
39674
39675     vector float vec_recip (vector float, vector float);
39676
39677     vector float vec_rsqrt (vector float);
39678
39679     vector float vec_rsqrte (vector float);
39680
39681     vector float vec_sel (vector float, vector float, vector bool int);
39682     vector float vec_sel (vector float, vector float, vector unsigned int);
39683     vector signed int vec_sel (vector signed int,
39684                                vector signed int,
39685                                vector bool int);
39686     vector signed int vec_sel (vector signed int,
39687                                vector signed int,
39688                                vector unsigned int);
39689     vector unsigned int vec_sel (vector unsigned int,
39690                                  vector unsigned int,
39691                                  vector bool int);
39692     vector unsigned int vec_sel (vector unsigned int,
39693                                  vector unsigned int,
39694                                  vector unsigned int);
39695     vector bool int vec_sel (vector bool int,
39696                              vector bool int,
39697                              vector bool int);
39698     vector bool int vec_sel (vector bool int,
39699                              vector bool int,
39700                              vector unsigned int);
39701     vector signed short vec_sel (vector signed short,
39702                                  vector signed short,
39703                                  vector bool short);
39704     vector signed short vec_sel (vector signed short,
39705                                  vector signed short,
39706                                  vector unsigned short);
39707     vector unsigned short vec_sel (vector unsigned short,
39708                                    vector unsigned short,
39709                                    vector bool short);
39710     vector unsigned short vec_sel (vector unsigned short,
39711                                    vector unsigned short,
39712                                    vector unsigned short);
39713     vector bool short vec_sel (vector bool short,
39714                                vector bool short,
39715                                vector bool short);
39716     vector bool short vec_sel (vector bool short,
39717                                vector bool short,
39718                                vector unsigned short);
39719     vector signed char vec_sel (vector signed char,
39720                                 vector signed char,
39721                                 vector bool char);
39722     vector signed char vec_sel (vector signed char,
39723                                 vector signed char,
39724                                 vector unsigned char);
39725     vector unsigned char vec_sel (vector unsigned char,
39726                                   vector unsigned char,
39727                                   vector bool char);
39728     vector unsigned char vec_sel (vector unsigned char,
39729                                   vector unsigned char,
39730                                   vector unsigned char);
39731     vector bool char vec_sel (vector bool char,
39732                               vector bool char,
39733                               vector bool char);
39734     vector bool char vec_sel (vector bool char,
39735                               vector bool char,
39736                               vector unsigned char);
39737
39738     vector signed char vec_sl (vector signed char,
39739                                vector unsigned char);
39740     vector unsigned char vec_sl (vector unsigned char,
39741                                  vector unsigned char);
39742     vector signed short vec_sl (vector signed short, vector unsigned short);
39743     vector unsigned short vec_sl (vector unsigned short,
39744                                   vector unsigned short);
39745     vector signed int vec_sl (vector signed int, vector unsigned int);
39746     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
39747
39748     vector signed int vec_vslw (vector signed int, vector unsigned int);
39749     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
39750
39751     vector signed short vec_vslh (vector signed short,
39752                                   vector unsigned short);
39753     vector unsigned short vec_vslh (vector unsigned short,
39754                                     vector unsigned short);
39755
39756     vector signed char vec_vslb (vector signed char, vector unsigned char);
39757     vector unsigned char vec_vslb (vector unsigned char,
39758                                    vector unsigned char);
39759
39760     vector float vec_sld (vector float, vector float, const int);
39761     vector signed int vec_sld (vector signed int,
39762                                vector signed int,
39763                                const int);
39764     vector unsigned int vec_sld (vector unsigned int,
39765                                  vector unsigned int,
39766                                  const int);
39767     vector bool int vec_sld (vector bool int,
39768                              vector bool int,
39769                              const int);
39770     vector signed short vec_sld (vector signed short,
39771                                  vector signed short,
39772                                  const int);
39773     vector unsigned short vec_sld (vector unsigned short,
39774                                    vector unsigned short,
39775                                    const int);
39776     vector bool short vec_sld (vector bool short,
39777                                vector bool short,
39778                                const int);
39779     vector pixel vec_sld (vector pixel,
39780                           vector pixel,
39781                           const int);
39782     vector signed char vec_sld (vector signed char,
39783                                 vector signed char,
39784                                 const int);
39785     vector unsigned char vec_sld (vector unsigned char,
39786                                   vector unsigned char,
39787                                   const int);
39788     vector bool char vec_sld (vector bool char,
39789                               vector bool char,
39790                               const int);
39791
39792     vector signed int vec_sll (vector signed int,
39793                                vector unsigned int);
39794     vector signed int vec_sll (vector signed int,
39795                                vector unsigned short);
39796     vector signed int vec_sll (vector signed int,
39797                                vector unsigned char);
39798     vector unsigned int vec_sll (vector unsigned int,
39799                                  vector unsigned int);
39800     vector unsigned int vec_sll (vector unsigned int,
39801                                  vector unsigned short);
39802     vector unsigned int vec_sll (vector unsigned int,
39803                                  vector unsigned char);
39804     vector bool int vec_sll (vector bool int,
39805                              vector unsigned int);
39806     vector bool int vec_sll (vector bool int,
39807                              vector unsigned short);
39808     vector bool int vec_sll (vector bool int,
39809                              vector unsigned char);
39810     vector signed short vec_sll (vector signed short,
39811                                  vector unsigned int);
39812     vector signed short vec_sll (vector signed short,
39813                                  vector unsigned short);
39814     vector signed short vec_sll (vector signed short,
39815                                  vector unsigned char);
39816     vector unsigned short vec_sll (vector unsigned short,
39817                                    vector unsigned int);
39818     vector unsigned short vec_sll (vector unsigned short,
39819                                    vector unsigned short);
39820     vector unsigned short vec_sll (vector unsigned short,
39821                                    vector unsigned char);
39822     vector bool short vec_sll (vector bool short, vector unsigned int);
39823     vector bool short vec_sll (vector bool short, vector unsigned short);
39824     vector bool short vec_sll (vector bool short, vector unsigned char);
39825     vector pixel vec_sll (vector pixel, vector unsigned int);
39826     vector pixel vec_sll (vector pixel, vector unsigned short);
39827     vector pixel vec_sll (vector pixel, vector unsigned char);
39828     vector signed char vec_sll (vector signed char, vector unsigned int);
39829     vector signed char vec_sll (vector signed char, vector unsigned short);
39830     vector signed char vec_sll (vector signed char, vector unsigned char);
39831     vector unsigned char vec_sll (vector unsigned char,
39832                                   vector unsigned int);
39833     vector unsigned char vec_sll (vector unsigned char,
39834                                   vector unsigned short);
39835     vector unsigned char vec_sll (vector unsigned char,
39836                                   vector unsigned char);
39837     vector bool char vec_sll (vector bool char, vector unsigned int);
39838     vector bool char vec_sll (vector bool char, vector unsigned short);
39839     vector bool char vec_sll (vector bool char, vector unsigned char);
39840
39841     vector float vec_slo (vector float, vector signed char);
39842     vector float vec_slo (vector float, vector unsigned char);
39843     vector signed int vec_slo (vector signed int, vector signed char);
39844     vector signed int vec_slo (vector signed int, vector unsigned char);
39845     vector unsigned int vec_slo (vector unsigned int, vector signed char);
39846     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
39847     vector signed short vec_slo (vector signed short, vector signed char);
39848     vector signed short vec_slo (vector signed short, vector unsigned char);
39849     vector unsigned short vec_slo (vector unsigned short,
39850                                    vector signed char);
39851     vector unsigned short vec_slo (vector unsigned short,
39852                                    vector unsigned char);
39853     vector pixel vec_slo (vector pixel, vector signed char);
39854     vector pixel vec_slo (vector pixel, vector unsigned char);
39855     vector signed char vec_slo (vector signed char, vector signed char);
39856     vector signed char vec_slo (vector signed char, vector unsigned char);
39857     vector unsigned char vec_slo (vector unsigned char, vector signed char);
39858     vector unsigned char vec_slo (vector unsigned char,
39859                                   vector unsigned char);
39860
39861     vector signed char vec_splat (vector signed char, const int);
39862     vector unsigned char vec_splat (vector unsigned char, const int);
39863     vector bool char vec_splat (vector bool char, const int);
39864     vector signed short vec_splat (vector signed short, const int);
39865     vector unsigned short vec_splat (vector unsigned short, const int);
39866     vector bool short vec_splat (vector bool short, const int);
39867     vector pixel vec_splat (vector pixel, const int);
39868     vector float vec_splat (vector float, const int);
39869     vector signed int vec_splat (vector signed int, const int);
39870     vector unsigned int vec_splat (vector unsigned int, const int);
39871     vector bool int vec_splat (vector bool int, const int);
39872
39873     vector float vec_vspltw (vector float, const int);
39874     vector signed int vec_vspltw (vector signed int, const int);
39875     vector unsigned int vec_vspltw (vector unsigned int, const int);
39876     vector bool int vec_vspltw (vector bool int, const int);
39877
39878     vector bool short vec_vsplth (vector bool short, const int);
39879     vector signed short vec_vsplth (vector signed short, const int);
39880     vector unsigned short vec_vsplth (vector unsigned short, const int);
39881     vector pixel vec_vsplth (vector pixel, const int);
39882
39883     vector signed char vec_vspltb (vector signed char, const int);
39884     vector unsigned char vec_vspltb (vector unsigned char, const int);
39885     vector bool char vec_vspltb (vector bool char, const int);
39886
39887     vector signed char vec_splat_s8 (const int);
39888
39889     vector signed short vec_splat_s16 (const int);
39890
39891     vector signed int vec_splat_s32 (const int);
39892
39893     vector unsigned char vec_splat_u8 (const int);
39894
39895     vector unsigned short vec_splat_u16 (const int);
39896
39897     vector unsigned int vec_splat_u32 (const int);
39898
39899     vector signed char vec_sr (vector signed char, vector unsigned char);
39900     vector unsigned char vec_sr (vector unsigned char,
39901                                  vector unsigned char);
39902     vector signed short vec_sr (vector signed short,
39903                                 vector unsigned short);
39904     vector unsigned short vec_sr (vector unsigned short,
39905                                   vector unsigned short);
39906     vector signed int vec_sr (vector signed int, vector unsigned int);
39907     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
39908
39909     vector signed int vec_vsrw (vector signed int, vector unsigned int);
39910     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
39911
39912     vector signed short vec_vsrh (vector signed short,
39913                                   vector unsigned short);
39914     vector unsigned short vec_vsrh (vector unsigned short,
39915                                     vector unsigned short);
39916
39917     vector signed char vec_vsrb (vector signed char, vector unsigned char);
39918     vector unsigned char vec_vsrb (vector unsigned char,
39919                                    vector unsigned char);
39920
39921     vector signed char vec_sra (vector signed char, vector unsigned char);
39922     vector unsigned char vec_sra (vector unsigned char,
39923                                   vector unsigned char);
39924     vector signed short vec_sra (vector signed short,
39925                                  vector unsigned short);
39926     vector unsigned short vec_sra (vector unsigned short,
39927                                    vector unsigned short);
39928     vector signed int vec_sra (vector signed int, vector unsigned int);
39929     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
39930
39931     vector signed int vec_vsraw (vector signed int, vector unsigned int);
39932     vector unsigned int vec_vsraw (vector unsigned int,
39933                                    vector unsigned int);
39934
39935     vector signed short vec_vsrah (vector signed short,
39936                                    vector unsigned short);
39937     vector unsigned short vec_vsrah (vector unsigned short,
39938                                      vector unsigned short);
39939
39940     vector signed char vec_vsrab (vector signed char, vector unsigned char);
39941     vector unsigned char vec_vsrab (vector unsigned char,
39942                                     vector unsigned char);
39943
39944     vector signed int vec_srl (vector signed int, vector unsigned int);
39945     vector signed int vec_srl (vector signed int, vector unsigned short);
39946     vector signed int vec_srl (vector signed int, vector unsigned char);
39947     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
39948     vector unsigned int vec_srl (vector unsigned int,
39949                                  vector unsigned short);
39950     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
39951     vector bool int vec_srl (vector bool int, vector unsigned int);
39952     vector bool int vec_srl (vector bool int, vector unsigned short);
39953     vector bool int vec_srl (vector bool int, vector unsigned char);
39954     vector signed short vec_srl (vector signed short, vector unsigned int);
39955     vector signed short vec_srl (vector signed short,
39956                                  vector unsigned short);
39957     vector signed short vec_srl (vector signed short, vector unsigned char);
39958     vector unsigned short vec_srl (vector unsigned short,
39959                                    vector unsigned int);
39960     vector unsigned short vec_srl (vector unsigned short,
39961                                    vector unsigned short);
39962     vector unsigned short vec_srl (vector unsigned short,
39963                                    vector unsigned char);
39964     vector bool short vec_srl (vector bool short, vector unsigned int);
39965     vector bool short vec_srl (vector bool short, vector unsigned short);
39966     vector bool short vec_srl (vector bool short, vector unsigned char);
39967     vector pixel vec_srl (vector pixel, vector unsigned int);
39968     vector pixel vec_srl (vector pixel, vector unsigned short);
39969     vector pixel vec_srl (vector pixel, vector unsigned char);
39970     vector signed char vec_srl (vector signed char, vector unsigned int);
39971     vector signed char vec_srl (vector signed char, vector unsigned short);
39972     vector signed char vec_srl (vector signed char, vector unsigned char);
39973     vector unsigned char vec_srl (vector unsigned char,
39974                                   vector unsigned int);
39975     vector unsigned char vec_srl (vector unsigned char,
39976                                   vector unsigned short);
39977     vector unsigned char vec_srl (vector unsigned char,
39978                                   vector unsigned char);
39979     vector bool char vec_srl (vector bool char, vector unsigned int);
39980     vector bool char vec_srl (vector bool char, vector unsigned short);
39981     vector bool char vec_srl (vector bool char, vector unsigned char);
39982
39983     vector float vec_sro (vector float, vector signed char);
39984     vector float vec_sro (vector float, vector unsigned char);
39985     vector signed int vec_sro (vector signed int, vector signed char);
39986     vector signed int vec_sro (vector signed int, vector unsigned char);
39987     vector unsigned int vec_sro (vector unsigned int, vector signed char);
39988     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
39989     vector signed short vec_sro (vector signed short, vector signed char);
39990     vector signed short vec_sro (vector signed short, vector unsigned char);
39991     vector unsigned short vec_sro (vector unsigned short,
39992                                    vector signed char);
39993     vector unsigned short vec_sro (vector unsigned short,
39994                                    vector unsigned char);
39995     vector pixel vec_sro (vector pixel, vector signed char);
39996     vector pixel vec_sro (vector pixel, vector unsigned char);
39997     vector signed char vec_sro (vector signed char, vector signed char);
39998     vector signed char vec_sro (vector signed char, vector unsigned char);
39999     vector unsigned char vec_sro (vector unsigned char, vector signed char);
40000     vector unsigned char vec_sro (vector unsigned char,
40001                                   vector unsigned char);
40002
40003     void vec_st (vector float, int, vector float *);
40004     void vec_st (vector float, int, float *);
40005     void vec_st (vector signed int, int, vector signed int *);
40006     void vec_st (vector signed int, int, int *);
40007     void vec_st (vector unsigned int, int, vector unsigned int *);
40008     void vec_st (vector unsigned int, int, unsigned int *);
40009     void vec_st (vector bool int, int, vector bool int *);
40010     void vec_st (vector bool int, int, unsigned int *);
40011     void vec_st (vector bool int, int, int *);
40012     void vec_st (vector signed short, int, vector signed short *);
40013     void vec_st (vector signed short, int, short *);
40014     void vec_st (vector unsigned short, int, vector unsigned short *);
40015     void vec_st (vector unsigned short, int, unsigned short *);
40016     void vec_st (vector bool short, int, vector bool short *);
40017     void vec_st (vector bool short, int, unsigned short *);
40018     void vec_st (vector pixel, int, vector pixel *);
40019     void vec_st (vector pixel, int, unsigned short *);
40020     void vec_st (vector pixel, int, short *);
40021     void vec_st (vector bool short, int, short *);
40022     void vec_st (vector signed char, int, vector signed char *);
40023     void vec_st (vector signed char, int, signed char *);
40024     void vec_st (vector unsigned char, int, vector unsigned char *);
40025     void vec_st (vector unsigned char, int, unsigned char *);
40026     void vec_st (vector bool char, int, vector bool char *);
40027     void vec_st (vector bool char, int, unsigned char *);
40028     void vec_st (vector bool char, int, signed char *);
40029
40030     void vec_ste (vector signed char, int, signed char *);
40031     void vec_ste (vector unsigned char, int, unsigned char *);
40032     void vec_ste (vector bool char, int, signed char *);
40033     void vec_ste (vector bool char, int, unsigned char *);
40034     void vec_ste (vector signed short, int, short *);
40035     void vec_ste (vector unsigned short, int, unsigned short *);
40036     void vec_ste (vector bool short, int, short *);
40037     void vec_ste (vector bool short, int, unsigned short *);
40038     void vec_ste (vector pixel, int, short *);
40039     void vec_ste (vector pixel, int, unsigned short *);
40040     void vec_ste (vector float, int, float *);
40041     void vec_ste (vector signed int, int, int *);
40042     void vec_ste (vector unsigned int, int, unsigned int *);
40043     void vec_ste (vector bool int, int, int *);
40044     void vec_ste (vector bool int, int, unsigned int *);
40045
40046     void vec_stvewx (vector float, int, float *);
40047     void vec_stvewx (vector signed int, int, int *);
40048     void vec_stvewx (vector unsigned int, int, unsigned int *);
40049     void vec_stvewx (vector bool int, int, int *);
40050     void vec_stvewx (vector bool int, int, unsigned int *);
40051
40052     void vec_stvehx (vector signed short, int, short *);
40053     void vec_stvehx (vector unsigned short, int, unsigned short *);
40054     void vec_stvehx (vector bool short, int, short *);
40055     void vec_stvehx (vector bool short, int, unsigned short *);
40056     void vec_stvehx (vector pixel, int, short *);
40057     void vec_stvehx (vector pixel, int, unsigned short *);
40058
40059     void vec_stvebx (vector signed char, int, signed char *);
40060     void vec_stvebx (vector unsigned char, int, unsigned char *);
40061     void vec_stvebx (vector bool char, int, signed char *);
40062     void vec_stvebx (vector bool char, int, unsigned char *);
40063
40064     void vec_stl (vector float, int, vector float *);
40065     void vec_stl (vector float, int, float *);
40066     void vec_stl (vector signed int, int, vector signed int *);
40067     void vec_stl (vector signed int, int, int *);
40068     void vec_stl (vector unsigned int, int, vector unsigned int *);
40069     void vec_stl (vector unsigned int, int, unsigned int *);
40070     void vec_stl (vector bool int, int, vector bool int *);
40071     void vec_stl (vector bool int, int, unsigned int *);
40072     void vec_stl (vector bool int, int, int *);
40073     void vec_stl (vector signed short, int, vector signed short *);
40074     void vec_stl (vector signed short, int, short *);
40075     void vec_stl (vector unsigned short, int, vector unsigned short *);
40076     void vec_stl (vector unsigned short, int, unsigned short *);
40077     void vec_stl (vector bool short, int, vector bool short *);
40078     void vec_stl (vector bool short, int, unsigned short *);
40079     void vec_stl (vector bool short, int, short *);
40080     void vec_stl (vector pixel, int, vector pixel *);
40081     void vec_stl (vector pixel, int, unsigned short *);
40082     void vec_stl (vector pixel, int, short *);
40083     void vec_stl (vector signed char, int, vector signed char *);
40084     void vec_stl (vector signed char, int, signed char *);
40085     void vec_stl (vector unsigned char, int, vector unsigned char *);
40086     void vec_stl (vector unsigned char, int, unsigned char *);
40087     void vec_stl (vector bool char, int, vector bool char *);
40088     void vec_stl (vector bool char, int, unsigned char *);
40089     void vec_stl (vector bool char, int, signed char *);
40090
40091     vector signed char vec_sub (vector bool char, vector signed char);
40092     vector signed char vec_sub (vector signed char, vector bool char);
40093     vector signed char vec_sub (vector signed char, vector signed char);
40094     vector unsigned char vec_sub (vector bool char, vector unsigned char);
40095     vector unsigned char vec_sub (vector unsigned char, vector bool char);
40096     vector unsigned char vec_sub (vector unsigned char,
40097                                   vector unsigned char);
40098     vector signed short vec_sub (vector bool short, vector signed short);
40099     vector signed short vec_sub (vector signed short, vector bool short);
40100     vector signed short vec_sub (vector signed short, vector signed short);
40101     vector unsigned short vec_sub (vector bool short,
40102                                    vector unsigned short);
40103     vector unsigned short vec_sub (vector unsigned short,
40104                                    vector bool short);
40105     vector unsigned short vec_sub (vector unsigned short,
40106                                    vector unsigned short);
40107     vector signed int vec_sub (vector bool int, vector signed int);
40108     vector signed int vec_sub (vector signed int, vector bool int);
40109     vector signed int vec_sub (vector signed int, vector signed int);
40110     vector unsigned int vec_sub (vector bool int, vector unsigned int);
40111     vector unsigned int vec_sub (vector unsigned int, vector bool int);
40112     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
40113     vector float vec_sub (vector float, vector float);
40114
40115     vector float vec_vsubfp (vector float, vector float);
40116
40117     vector signed int vec_vsubuwm (vector bool int, vector signed int);
40118     vector signed int vec_vsubuwm (vector signed int, vector bool int);
40119     vector signed int vec_vsubuwm (vector signed int, vector signed int);
40120     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
40121     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
40122     vector unsigned int vec_vsubuwm (vector unsigned int,
40123                                      vector unsigned int);
40124
40125     vector signed short vec_vsubuhm (vector bool short,
40126                                      vector signed short);
40127     vector signed short vec_vsubuhm (vector signed short,
40128                                      vector bool short);
40129     vector signed short vec_vsubuhm (vector signed short,
40130                                      vector signed short);
40131     vector unsigned short vec_vsubuhm (vector bool short,
40132                                        vector unsigned short);
40133     vector unsigned short vec_vsubuhm (vector unsigned short,
40134                                        vector bool short);
40135     vector unsigned short vec_vsubuhm (vector unsigned short,
40136                                        vector unsigned short);
40137
40138     vector signed char vec_vsububm (vector bool char, vector signed char);
40139     vector signed char vec_vsububm (vector signed char, vector bool char);
40140     vector signed char vec_vsububm (vector signed char, vector signed char);
40141     vector unsigned char vec_vsububm (vector bool char,
40142                                       vector unsigned char);
40143     vector unsigned char vec_vsububm (vector unsigned char,
40144                                       vector bool char);
40145     vector unsigned char vec_vsububm (vector unsigned char,
40146                                       vector unsigned char);
40147
40148     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
40149
40150     vector unsigned char vec_subs (vector bool char, vector unsigned char);
40151     vector unsigned char vec_subs (vector unsigned char, vector bool char);
40152     vector unsigned char vec_subs (vector unsigned char,
40153                                    vector unsigned char);
40154     vector signed char vec_subs (vector bool char, vector signed char);
40155     vector signed char vec_subs (vector signed char, vector bool char);
40156     vector signed char vec_subs (vector signed char, vector signed char);
40157     vector unsigned short vec_subs (vector bool short,
40158                                     vector unsigned short);
40159     vector unsigned short vec_subs (vector unsigned short,
40160                                     vector bool short);
40161     vector unsigned short vec_subs (vector unsigned short,
40162                                     vector unsigned short);
40163     vector signed short vec_subs (vector bool short, vector signed short);
40164     vector signed short vec_subs (vector signed short, vector bool short);
40165     vector signed short vec_subs (vector signed short, vector signed short);
40166     vector unsigned int vec_subs (vector bool int, vector unsigned int);
40167     vector unsigned int vec_subs (vector unsigned int, vector bool int);
40168     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
40169     vector signed int vec_subs (vector bool int, vector signed int);
40170     vector signed int vec_subs (vector signed int, vector bool int);
40171     vector signed int vec_subs (vector signed int, vector signed int);
40172
40173     vector signed int vec_vsubsws (vector bool int, vector signed int);
40174     vector signed int vec_vsubsws (vector signed int, vector bool int);
40175     vector signed int vec_vsubsws (vector signed int, vector signed int);
40176
40177     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
40178     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
40179     vector unsigned int vec_vsubuws (vector unsigned int,
40180                                      vector unsigned int);
40181
40182     vector signed short vec_vsubshs (vector bool short,
40183                                      vector signed short);
40184     vector signed short vec_vsubshs (vector signed short,
40185                                      vector bool short);
40186     vector signed short vec_vsubshs (vector signed short,
40187                                      vector signed short);
40188
40189     vector unsigned short vec_vsubuhs (vector bool short,
40190                                        vector unsigned short);
40191     vector unsigned short vec_vsubuhs (vector unsigned short,
40192                                        vector bool short);
40193     vector unsigned short vec_vsubuhs (vector unsigned short,
40194                                        vector unsigned short);
40195
40196     vector signed char vec_vsubsbs (vector bool char, vector signed char);
40197     vector signed char vec_vsubsbs (vector signed char, vector bool char);
40198     vector signed char vec_vsubsbs (vector signed char, vector signed char);
40199
40200     vector unsigned char vec_vsububs (vector bool char,
40201                                       vector unsigned char);
40202     vector unsigned char vec_vsububs (vector unsigned char,
40203                                       vector bool char);
40204     vector unsigned char vec_vsububs (vector unsigned char,
40205                                       vector unsigned char);
40206
40207     vector unsigned int vec_sum4s (vector unsigned char,
40208                                    vector unsigned int);
40209     vector signed int vec_sum4s (vector signed char, vector signed int);
40210     vector signed int vec_sum4s (vector signed short, vector signed int);
40211
40212     vector signed int vec_vsum4shs (vector signed short, vector signed int);
40213
40214     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
40215
40216     vector unsigned int vec_vsum4ubs (vector unsigned char,
40217                                       vector unsigned int);
40218
40219     vector signed int vec_sum2s (vector signed int, vector signed int);
40220
40221     vector signed int vec_sums (vector signed int, vector signed int);
40222
40223     vector float vec_trunc (vector float);
40224
40225     vector signed short vec_unpackh (vector signed char);
40226     vector bool short vec_unpackh (vector bool char);
40227     vector signed int vec_unpackh (vector signed short);
40228     vector bool int vec_unpackh (vector bool short);
40229     vector unsigned int vec_unpackh (vector pixel);
40230
40231     vector bool int vec_vupkhsh (vector bool short);
40232     vector signed int vec_vupkhsh (vector signed short);
40233
40234     vector unsigned int vec_vupkhpx (vector pixel);
40235
40236     vector bool short vec_vupkhsb (vector bool char);
40237     vector signed short vec_vupkhsb (vector signed char);
40238
40239     vector signed short vec_unpackl (vector signed char);
40240     vector bool short vec_unpackl (vector bool char);
40241     vector unsigned int vec_unpackl (vector pixel);
40242     vector signed int vec_unpackl (vector signed short);
40243     vector bool int vec_unpackl (vector bool short);
40244
40245     vector unsigned int vec_vupklpx (vector pixel);
40246
40247     vector bool int vec_vupklsh (vector bool short);
40248     vector signed int vec_vupklsh (vector signed short);
40249
40250     vector bool short vec_vupklsb (vector bool char);
40251     vector signed short vec_vupklsb (vector signed char);
40252
40253     vector float vec_xor (vector float, vector float);
40254     vector float vec_xor (vector float, vector bool int);
40255     vector float vec_xor (vector bool int, vector float);
40256     vector bool int vec_xor (vector bool int, vector bool int);
40257     vector signed int vec_xor (vector bool int, vector signed int);
40258     vector signed int vec_xor (vector signed int, vector bool int);
40259     vector signed int vec_xor (vector signed int, vector signed int);
40260     vector unsigned int vec_xor (vector bool int, vector unsigned int);
40261     vector unsigned int vec_xor (vector unsigned int, vector bool int);
40262     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
40263     vector bool short vec_xor (vector bool short, vector bool short);
40264     vector signed short vec_xor (vector bool short, vector signed short);
40265     vector signed short vec_xor (vector signed short, vector bool short);
40266     vector signed short vec_xor (vector signed short, vector signed short);
40267     vector unsigned short vec_xor (vector bool short,
40268                                    vector unsigned short);
40269     vector unsigned short vec_xor (vector unsigned short,
40270                                    vector bool short);
40271     vector unsigned short vec_xor (vector unsigned short,
40272                                    vector unsigned short);
40273     vector signed char vec_xor (vector bool char, vector signed char);
40274     vector bool char vec_xor (vector bool char, vector bool char);
40275     vector signed char vec_xor (vector signed char, vector bool char);
40276     vector signed char vec_xor (vector signed char, vector signed char);
40277     vector unsigned char vec_xor (vector bool char, vector unsigned char);
40278     vector unsigned char vec_xor (vector unsigned char, vector bool char);
40279     vector unsigned char vec_xor (vector unsigned char,
40280                                   vector unsigned char);
40281
40282     int vec_all_eq (vector signed char, vector bool char);
40283     int vec_all_eq (vector signed char, vector signed char);
40284     int vec_all_eq (vector unsigned char, vector bool char);
40285     int vec_all_eq (vector unsigned char, vector unsigned char);
40286     int vec_all_eq (vector bool char, vector bool char);
40287     int vec_all_eq (vector bool char, vector unsigned char);
40288     int vec_all_eq (vector bool char, vector signed char);
40289     int vec_all_eq (vector signed short, vector bool short);
40290     int vec_all_eq (vector signed short, vector signed short);
40291     int vec_all_eq (vector unsigned short, vector bool short);
40292     int vec_all_eq (vector unsigned short, vector unsigned short);
40293     int vec_all_eq (vector bool short, vector bool short);
40294     int vec_all_eq (vector bool short, vector unsigned short);
40295     int vec_all_eq (vector bool short, vector signed short);
40296     int vec_all_eq (vector pixel, vector pixel);
40297     int vec_all_eq (vector signed int, vector bool int);
40298     int vec_all_eq (vector signed int, vector signed int);
40299     int vec_all_eq (vector unsigned int, vector bool int);
40300     int vec_all_eq (vector unsigned int, vector unsigned int);
40301     int vec_all_eq (vector bool int, vector bool int);
40302     int vec_all_eq (vector bool int, vector unsigned int);
40303     int vec_all_eq (vector bool int, vector signed int);
40304     int vec_all_eq (vector float, vector float);
40305
40306     int vec_all_ge (vector bool char, vector unsigned char);
40307     int vec_all_ge (vector unsigned char, vector bool char);
40308     int vec_all_ge (vector unsigned char, vector unsigned char);
40309     int vec_all_ge (vector bool char, vector signed char);
40310     int vec_all_ge (vector signed char, vector bool char);
40311     int vec_all_ge (vector signed char, vector signed char);
40312     int vec_all_ge (vector bool short, vector unsigned short);
40313     int vec_all_ge (vector unsigned short, vector bool short);
40314     int vec_all_ge (vector unsigned short, vector unsigned short);
40315     int vec_all_ge (vector signed short, vector signed short);
40316     int vec_all_ge (vector bool short, vector signed short);
40317     int vec_all_ge (vector signed short, vector bool short);
40318     int vec_all_ge (vector bool int, vector unsigned int);
40319     int vec_all_ge (vector unsigned int, vector bool int);
40320     int vec_all_ge (vector unsigned int, vector unsigned int);
40321     int vec_all_ge (vector bool int, vector signed int);
40322     int vec_all_ge (vector signed int, vector bool int);
40323     int vec_all_ge (vector signed int, vector signed int);
40324     int vec_all_ge (vector float, vector float);
40325
40326     int vec_all_gt (vector bool char, vector unsigned char);
40327     int vec_all_gt (vector unsigned char, vector bool char);
40328     int vec_all_gt (vector unsigned char, vector unsigned char);
40329     int vec_all_gt (vector bool char, vector signed char);
40330     int vec_all_gt (vector signed char, vector bool char);
40331     int vec_all_gt (vector signed char, vector signed char);
40332     int vec_all_gt (vector bool short, vector unsigned short);
40333     int vec_all_gt (vector unsigned short, vector bool short);
40334     int vec_all_gt (vector unsigned short, vector unsigned short);
40335     int vec_all_gt (vector bool short, vector signed short);
40336     int vec_all_gt (vector signed short, vector bool short);
40337     int vec_all_gt (vector signed short, vector signed short);
40338     int vec_all_gt (vector bool int, vector unsigned int);
40339     int vec_all_gt (vector unsigned int, vector bool int);
40340     int vec_all_gt (vector unsigned int, vector unsigned int);
40341     int vec_all_gt (vector bool int, vector signed int);
40342     int vec_all_gt (vector signed int, vector bool int);
40343     int vec_all_gt (vector signed int, vector signed int);
40344     int vec_all_gt (vector float, vector float);
40345
40346     int vec_all_in (vector float, vector float);
40347
40348     int vec_all_le (vector bool char, vector unsigned char);
40349     int vec_all_le (vector unsigned char, vector bool char);
40350     int vec_all_le (vector unsigned char, vector unsigned char);
40351     int vec_all_le (vector bool char, vector signed char);
40352     int vec_all_le (vector signed char, vector bool char);
40353     int vec_all_le (vector signed char, vector signed char);
40354     int vec_all_le (vector bool short, vector unsigned short);
40355     int vec_all_le (vector unsigned short, vector bool short);
40356     int vec_all_le (vector unsigned short, vector unsigned short);
40357     int vec_all_le (vector bool short, vector signed short);
40358     int vec_all_le (vector signed short, vector bool short);
40359     int vec_all_le (vector signed short, vector signed short);
40360     int vec_all_le (vector bool int, vector unsigned int);
40361     int vec_all_le (vector unsigned int, vector bool int);
40362     int vec_all_le (vector unsigned int, vector unsigned int);
40363     int vec_all_le (vector bool int, vector signed int);
40364     int vec_all_le (vector signed int, vector bool int);
40365     int vec_all_le (vector signed int, vector signed int);
40366     int vec_all_le (vector float, vector float);
40367
40368     int vec_all_lt (vector bool char, vector unsigned char);
40369     int vec_all_lt (vector unsigned char, vector bool char);
40370     int vec_all_lt (vector unsigned char, vector unsigned char);
40371     int vec_all_lt (vector bool char, vector signed char);
40372     int vec_all_lt (vector signed char, vector bool char);
40373     int vec_all_lt (vector signed char, vector signed char);
40374     int vec_all_lt (vector bool short, vector unsigned short);
40375     int vec_all_lt (vector unsigned short, vector bool short);
40376     int vec_all_lt (vector unsigned short, vector unsigned short);
40377     int vec_all_lt (vector bool short, vector signed short);
40378     int vec_all_lt (vector signed short, vector bool short);
40379     int vec_all_lt (vector signed short, vector signed short);
40380     int vec_all_lt (vector bool int, vector unsigned int);
40381     int vec_all_lt (vector unsigned int, vector bool int);
40382     int vec_all_lt (vector unsigned int, vector unsigned int);
40383     int vec_all_lt (vector bool int, vector signed int);
40384     int vec_all_lt (vector signed int, vector bool int);
40385     int vec_all_lt (vector signed int, vector signed int);
40386     int vec_all_lt (vector float, vector float);
40387
40388     int vec_all_nan (vector float);
40389
40390     int vec_all_ne (vector signed char, vector bool char);
40391     int vec_all_ne (vector signed char, vector signed char);
40392     int vec_all_ne (vector unsigned char, vector bool char);
40393     int vec_all_ne (vector unsigned char, vector unsigned char);
40394     int vec_all_ne (vector bool char, vector bool char);
40395     int vec_all_ne (vector bool char, vector unsigned char);
40396     int vec_all_ne (vector bool char, vector signed char);
40397     int vec_all_ne (vector signed short, vector bool short);
40398     int vec_all_ne (vector signed short, vector signed short);
40399     int vec_all_ne (vector unsigned short, vector bool short);
40400     int vec_all_ne (vector unsigned short, vector unsigned short);
40401     int vec_all_ne (vector bool short, vector bool short);
40402     int vec_all_ne (vector bool short, vector unsigned short);
40403     int vec_all_ne (vector bool short, vector signed short);
40404     int vec_all_ne (vector pixel, vector pixel);
40405     int vec_all_ne (vector signed int, vector bool int);
40406     int vec_all_ne (vector signed int, vector signed int);
40407     int vec_all_ne (vector unsigned int, vector bool int);
40408     int vec_all_ne (vector unsigned int, vector unsigned int);
40409     int vec_all_ne (vector bool int, vector bool int);
40410     int vec_all_ne (vector bool int, vector unsigned int);
40411     int vec_all_ne (vector bool int, vector signed int);
40412     int vec_all_ne (vector float, vector float);
40413
40414     int vec_all_nge (vector float, vector float);
40415
40416     int vec_all_ngt (vector float, vector float);
40417
40418     int vec_all_nle (vector float, vector float);
40419
40420     int vec_all_nlt (vector float, vector float);
40421
40422     int vec_all_numeric (vector float);
40423
40424     int vec_any_eq (vector signed char, vector bool char);
40425     int vec_any_eq (vector signed char, vector signed char);
40426     int vec_any_eq (vector unsigned char, vector bool char);
40427     int vec_any_eq (vector unsigned char, vector unsigned char);
40428     int vec_any_eq (vector bool char, vector bool char);
40429     int vec_any_eq (vector bool char, vector unsigned char);
40430     int vec_any_eq (vector bool char, vector signed char);
40431     int vec_any_eq (vector signed short, vector bool short);
40432     int vec_any_eq (vector signed short, vector signed short);
40433     int vec_any_eq (vector unsigned short, vector bool short);
40434     int vec_any_eq (vector unsigned short, vector unsigned short);
40435     int vec_any_eq (vector bool short, vector bool short);
40436     int vec_any_eq (vector bool short, vector unsigned short);
40437     int vec_any_eq (vector bool short, vector signed short);
40438     int vec_any_eq (vector pixel, vector pixel);
40439     int vec_any_eq (vector signed int, vector bool int);
40440     int vec_any_eq (vector signed int, vector signed int);
40441     int vec_any_eq (vector unsigned int, vector bool int);
40442     int vec_any_eq (vector unsigned int, vector unsigned int);
40443     int vec_any_eq (vector bool int, vector bool int);
40444     int vec_any_eq (vector bool int, vector unsigned int);
40445     int vec_any_eq (vector bool int, vector signed int);
40446     int vec_any_eq (vector float, vector float);
40447
40448     int vec_any_ge (vector signed char, vector bool char);
40449     int vec_any_ge (vector unsigned char, vector bool char);
40450     int vec_any_ge (vector unsigned char, vector unsigned char);
40451     int vec_any_ge (vector signed char, vector signed char);
40452     int vec_any_ge (vector bool char, vector unsigned char);
40453     int vec_any_ge (vector bool char, vector signed char);
40454     int vec_any_ge (vector unsigned short, vector bool short);
40455     int vec_any_ge (vector unsigned short, vector unsigned short);
40456     int vec_any_ge (vector signed short, vector signed short);
40457     int vec_any_ge (vector signed short, vector bool short);
40458     int vec_any_ge (vector bool short, vector unsigned short);
40459     int vec_any_ge (vector bool short, vector signed short);
40460     int vec_any_ge (vector signed int, vector bool int);
40461     int vec_any_ge (vector unsigned int, vector bool int);
40462     int vec_any_ge (vector unsigned int, vector unsigned int);
40463     int vec_any_ge (vector signed int, vector signed int);
40464     int vec_any_ge (vector bool int, vector unsigned int);
40465     int vec_any_ge (vector bool int, vector signed int);
40466     int vec_any_ge (vector float, vector float);
40467
40468     int vec_any_gt (vector bool char, vector unsigned char);
40469     int vec_any_gt (vector unsigned char, vector bool char);
40470     int vec_any_gt (vector unsigned char, vector unsigned char);
40471     int vec_any_gt (vector bool char, vector signed char);
40472     int vec_any_gt (vector signed char, vector bool char);
40473     int vec_any_gt (vector signed char, vector signed char);
40474     int vec_any_gt (vector bool short, vector unsigned short);
40475     int vec_any_gt (vector unsigned short, vector bool short);
40476     int vec_any_gt (vector unsigned short, vector unsigned short);
40477     int vec_any_gt (vector bool short, vector signed short);
40478     int vec_any_gt (vector signed short, vector bool short);
40479     int vec_any_gt (vector signed short, vector signed short);
40480     int vec_any_gt (vector bool int, vector unsigned int);
40481     int vec_any_gt (vector unsigned int, vector bool int);
40482     int vec_any_gt (vector unsigned int, vector unsigned int);
40483     int vec_any_gt (vector bool int, vector signed int);
40484     int vec_any_gt (vector signed int, vector bool int);
40485     int vec_any_gt (vector signed int, vector signed int);
40486     int vec_any_gt (vector float, vector float);
40487
40488     int vec_any_le (vector bool char, vector unsigned char);
40489     int vec_any_le (vector unsigned char, vector bool char);
40490     int vec_any_le (vector unsigned char, vector unsigned char);
40491     int vec_any_le (vector bool char, vector signed char);
40492     int vec_any_le (vector signed char, vector bool char);
40493     int vec_any_le (vector signed char, vector signed char);
40494     int vec_any_le (vector bool short, vector unsigned short);
40495     int vec_any_le (vector unsigned short, vector bool short);
40496     int vec_any_le (vector unsigned short, vector unsigned short);
40497     int vec_any_le (vector bool short, vector signed short);
40498     int vec_any_le (vector signed short, vector bool short);
40499     int vec_any_le (vector signed short, vector signed short);
40500     int vec_any_le (vector bool int, vector unsigned int);
40501     int vec_any_le (vector unsigned int, vector bool int);
40502     int vec_any_le (vector unsigned int, vector unsigned int);
40503     int vec_any_le (vector bool int, vector signed int);
40504     int vec_any_le (vector signed int, vector bool int);
40505     int vec_any_le (vector signed int, vector signed int);
40506     int vec_any_le (vector float, vector float);
40507
40508     int vec_any_lt (vector bool char, vector unsigned char);
40509     int vec_any_lt (vector unsigned char, vector bool char);
40510     int vec_any_lt (vector unsigned char, vector unsigned char);
40511     int vec_any_lt (vector bool char, vector signed char);
40512     int vec_any_lt (vector signed char, vector bool char);
40513     int vec_any_lt (vector signed char, vector signed char);
40514     int vec_any_lt (vector bool short, vector unsigned short);
40515     int vec_any_lt (vector unsigned short, vector bool short);
40516     int vec_any_lt (vector unsigned short, vector unsigned short);
40517     int vec_any_lt (vector bool short, vector signed short);
40518     int vec_any_lt (vector signed short, vector bool short);
40519     int vec_any_lt (vector signed short, vector signed short);
40520     int vec_any_lt (vector bool int, vector unsigned int);
40521     int vec_any_lt (vector unsigned int, vector bool int);
40522     int vec_any_lt (vector unsigned int, vector unsigned int);
40523     int vec_any_lt (vector bool int, vector signed int);
40524     int vec_any_lt (vector signed int, vector bool int);
40525     int vec_any_lt (vector signed int, vector signed int);
40526     int vec_any_lt (vector float, vector float);
40527
40528     int vec_any_nan (vector float);
40529
40530     int vec_any_ne (vector signed char, vector bool char);
40531     int vec_any_ne (vector signed char, vector signed char);
40532     int vec_any_ne (vector unsigned char, vector bool char);
40533     int vec_any_ne (vector unsigned char, vector unsigned char);
40534     int vec_any_ne (vector bool char, vector bool char);
40535     int vec_any_ne (vector bool char, vector unsigned char);
40536     int vec_any_ne (vector bool char, vector signed char);
40537     int vec_any_ne (vector signed short, vector bool short);
40538     int vec_any_ne (vector signed short, vector signed short);
40539     int vec_any_ne (vector unsigned short, vector bool short);
40540     int vec_any_ne (vector unsigned short, vector unsigned short);
40541     int vec_any_ne (vector bool short, vector bool short);
40542     int vec_any_ne (vector bool short, vector unsigned short);
40543     int vec_any_ne (vector bool short, vector signed short);
40544     int vec_any_ne (vector pixel, vector pixel);
40545     int vec_any_ne (vector signed int, vector bool int);
40546     int vec_any_ne (vector signed int, vector signed int);
40547     int vec_any_ne (vector unsigned int, vector bool int);
40548     int vec_any_ne (vector unsigned int, vector unsigned int);
40549     int vec_any_ne (vector bool int, vector bool int);
40550     int vec_any_ne (vector bool int, vector unsigned int);
40551     int vec_any_ne (vector bool int, vector signed int);
40552     int vec_any_ne (vector float, vector float);
40553
40554     int vec_any_nge (vector float, vector float);
40555
40556     int vec_any_ngt (vector float, vector float);
40557
40558     int vec_any_nle (vector float, vector float);
40559
40560     int vec_any_nlt (vector float, vector float);
40561
40562     int vec_any_numeric (vector float);
40563
40564     int vec_any_out (vector float, vector float);
40565
40566 If the vector/scalar (VSX) instruction set is available, the following
40567additional functions are available:
40568
40569     vector double vec_abs (vector double);
40570     vector double vec_add (vector double, vector double);
40571     vector double vec_and (vector double, vector double);
40572     vector double vec_and (vector double, vector bool long);
40573     vector double vec_and (vector bool long, vector double);
40574     vector double vec_andc (vector double, vector double);
40575     vector double vec_andc (vector double, vector bool long);
40576     vector double vec_andc (vector bool long, vector double);
40577     vector double vec_ceil (vector double);
40578     vector bool long vec_cmpeq (vector double, vector double);
40579     vector bool long vec_cmpge (vector double, vector double);
40580     vector bool long vec_cmpgt (vector double, vector double);
40581     vector bool long vec_cmple (vector double, vector double);
40582     vector bool long vec_cmplt (vector double, vector double);
40583     vector float vec_div (vector float, vector float);
40584     vector double vec_div (vector double, vector double);
40585     vector double vec_floor (vector double);
40586     vector double vec_ld (int, const vector double *);
40587     vector double vec_ld (int, const double *);
40588     vector double vec_ldl (int, const vector double *);
40589     vector double vec_ldl (int, const double *);
40590     vector unsigned char vec_lvsl (int, const volatile double *);
40591     vector unsigned char vec_lvsr (int, const volatile double *);
40592     vector double vec_madd (vector double, vector double, vector double);
40593     vector double vec_max (vector double, vector double);
40594     vector double vec_min (vector double, vector double);
40595     vector float vec_msub (vector float, vector float, vector float);
40596     vector double vec_msub (vector double, vector double, vector double);
40597     vector float vec_mul (vector float, vector float);
40598     vector double vec_mul (vector double, vector double);
40599     vector float vec_nearbyint (vector float);
40600     vector double vec_nearbyint (vector double);
40601     vector float vec_nmadd (vector float, vector float, vector float);
40602     vector double vec_nmadd (vector double, vector double, vector double);
40603     vector double vec_nmsub (vector double, vector double, vector double);
40604     vector double vec_nor (vector double, vector double);
40605     vector double vec_or (vector double, vector double);
40606     vector double vec_or (vector double, vector bool long);
40607     vector double vec_or (vector bool long, vector double);
40608     vector double vec_perm (vector double,
40609                             vector double,
40610                             vector unsigned char);
40611     vector double vec_rint (vector double);
40612     vector double vec_recip (vector double, vector double);
40613     vector double vec_rsqrt (vector double);
40614     vector double vec_rsqrte (vector double);
40615     vector double vec_sel (vector double, vector double, vector bool long);
40616     vector double vec_sel (vector double, vector double, vector unsigned long);
40617     vector double vec_sub (vector double, vector double);
40618     vector float vec_sqrt (vector float);
40619     vector double vec_sqrt (vector double);
40620     void vec_st (vector double, int, vector double *);
40621     void vec_st (vector double, int, double *);
40622     vector double vec_trunc (vector double);
40623     vector double vec_xor (vector double, vector double);
40624     vector double vec_xor (vector double, vector bool long);
40625     vector double vec_xor (vector bool long, vector double);
40626     int vec_all_eq (vector double, vector double);
40627     int vec_all_ge (vector double, vector double);
40628     int vec_all_gt (vector double, vector double);
40629     int vec_all_le (vector double, vector double);
40630     int vec_all_lt (vector double, vector double);
40631     int vec_all_nan (vector double);
40632     int vec_all_ne (vector double, vector double);
40633     int vec_all_nge (vector double, vector double);
40634     int vec_all_ngt (vector double, vector double);
40635     int vec_all_nle (vector double, vector double);
40636     int vec_all_nlt (vector double, vector double);
40637     int vec_all_numeric (vector double);
40638     int vec_any_eq (vector double, vector double);
40639     int vec_any_ge (vector double, vector double);
40640     int vec_any_gt (vector double, vector double);
40641     int vec_any_le (vector double, vector double);
40642     int vec_any_lt (vector double, vector double);
40643     int vec_any_nan (vector double);
40644     int vec_any_ne (vector double, vector double);
40645     int vec_any_nge (vector double, vector double);
40646     int vec_any_ngt (vector double, vector double);
40647     int vec_any_nle (vector double, vector double);
40648     int vec_any_nlt (vector double, vector double);
40649     int vec_any_numeric (vector double);
40650
40651     vector double vec_vsx_ld (int, const vector double *);
40652     vector double vec_vsx_ld (int, const double *);
40653     vector float vec_vsx_ld (int, const vector float *);
40654     vector float vec_vsx_ld (int, const float *);
40655     vector bool int vec_vsx_ld (int, const vector bool int *);
40656     vector signed int vec_vsx_ld (int, const vector signed int *);
40657     vector signed int vec_vsx_ld (int, const int *);
40658     vector signed int vec_vsx_ld (int, const long *);
40659     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
40660     vector unsigned int vec_vsx_ld (int, const unsigned int *);
40661     vector unsigned int vec_vsx_ld (int, const unsigned long *);
40662     vector bool short vec_vsx_ld (int, const vector bool short *);
40663     vector pixel vec_vsx_ld (int, const vector pixel *);
40664     vector signed short vec_vsx_ld (int, const vector signed short *);
40665     vector signed short vec_vsx_ld (int, const short *);
40666     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
40667     vector unsigned short vec_vsx_ld (int, const unsigned short *);
40668     vector bool char vec_vsx_ld (int, const vector bool char *);
40669     vector signed char vec_vsx_ld (int, const vector signed char *);
40670     vector signed char vec_vsx_ld (int, const signed char *);
40671     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
40672     vector unsigned char vec_vsx_ld (int, const unsigned char *);
40673
40674     void vec_vsx_st (vector double, int, vector double *);
40675     void vec_vsx_st (vector double, int, double *);
40676     void vec_vsx_st (vector float, int, vector float *);
40677     void vec_vsx_st (vector float, int, float *);
40678     void vec_vsx_st (vector signed int, int, vector signed int *);
40679     void vec_vsx_st (vector signed int, int, int *);
40680     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
40681     void vec_vsx_st (vector unsigned int, int, unsigned int *);
40682     void vec_vsx_st (vector bool int, int, vector bool int *);
40683     void vec_vsx_st (vector bool int, int, unsigned int *);
40684     void vec_vsx_st (vector bool int, int, int *);
40685     void vec_vsx_st (vector signed short, int, vector signed short *);
40686     void vec_vsx_st (vector signed short, int, short *);
40687     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
40688     void vec_vsx_st (vector unsigned short, int, unsigned short *);
40689     void vec_vsx_st (vector bool short, int, vector bool short *);
40690     void vec_vsx_st (vector bool short, int, unsigned short *);
40691     void vec_vsx_st (vector pixel, int, vector pixel *);
40692     void vec_vsx_st (vector pixel, int, unsigned short *);
40693     void vec_vsx_st (vector pixel, int, short *);
40694     void vec_vsx_st (vector bool short, int, short *);
40695     void vec_vsx_st (vector signed char, int, vector signed char *);
40696     void vec_vsx_st (vector signed char, int, signed char *);
40697     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
40698     void vec_vsx_st (vector unsigned char, int, unsigned char *);
40699     void vec_vsx_st (vector bool char, int, vector bool char *);
40700     void vec_vsx_st (vector bool char, int, unsigned char *);
40701     void vec_vsx_st (vector bool char, int, signed char *);
40702
40703     vector double vec_xxpermdi (vector double, vector double, int);
40704     vector float vec_xxpermdi (vector float, vector float, int);
40705     vector long long vec_xxpermdi (vector long long, vector long long, int);
40706     vector unsigned long long vec_xxpermdi (vector unsigned long long,
40707                                             vector unsigned long long, int);
40708     vector int vec_xxpermdi (vector int, vector int, int);
40709     vector unsigned int vec_xxpermdi (vector unsigned int,
40710                                       vector unsigned int, int);
40711     vector short vec_xxpermdi (vector short, vector short, int);
40712     vector unsigned short vec_xxpermdi (vector unsigned short,
40713                                         vector unsigned short, int);
40714     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
40715     vector unsigned char vec_xxpermdi (vector unsigned char,
40716                                        vector unsigned char, int);
40717
40718     vector double vec_xxsldi (vector double, vector double, int);
40719     vector float vec_xxsldi (vector float, vector float, int);
40720     vector long long vec_xxsldi (vector long long, vector long long, int);
40721     vector unsigned long long vec_xxsldi (vector unsigned long long,
40722                                           vector unsigned long long, int);
40723     vector int vec_xxsldi (vector int, vector int, int);
40724     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
40725     vector short vec_xxsldi (vector short, vector short, int);
40726     vector unsigned short vec_xxsldi (vector unsigned short,
40727                                       vector unsigned short, int);
40728     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
40729     vector unsigned char vec_xxsldi (vector unsigned char,
40730                                      vector unsigned char, int);
40731
40732 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
40733the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
40734set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
40735always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
40736instructions.
40737
40738 If the ISA 2.07 additions to the vector/scalar (power8-vector)
40739instruction set is available, the following additional functions are
40740available for both 32-bit and 64-bit targets.  For 64-bit targets, you
40741can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
40742instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
40743VECTOR UNSIGNED LONG LONG.
40744
40745     vector long long vec_abs (vector long long);
40746
40747     vector long long vec_add (vector long long, vector long long);
40748     vector unsigned long long vec_add (vector unsigned long long,
40749                                        vector unsigned long long);
40750
40751     int vec_all_eq (vector long long, vector long long);
40752     int vec_all_ge (vector long long, vector long long);
40753     int vec_all_gt (vector long long, vector long long);
40754     int vec_all_le (vector long long, vector long long);
40755     int vec_all_lt (vector long long, vector long long);
40756     int vec_all_ne (vector long long, vector long long);
40757     int vec_any_eq (vector long long, vector long long);
40758     int vec_any_ge (vector long long, vector long long);
40759     int vec_any_gt (vector long long, vector long long);
40760     int vec_any_le (vector long long, vector long long);
40761     int vec_any_lt (vector long long, vector long long);
40762     int vec_any_ne (vector long long, vector long long);
40763
40764     vector long long vec_eqv (vector long long, vector long long);
40765     vector long long vec_eqv (vector bool long long, vector long long);
40766     vector long long vec_eqv (vector long long, vector bool long long);
40767     vector unsigned long long vec_eqv (vector unsigned long long,
40768                                        vector unsigned long long);
40769     vector unsigned long long vec_eqv (vector bool long long,
40770                                        vector unsigned long long);
40771     vector unsigned long long vec_eqv (vector unsigned long long,
40772                                        vector bool long long);
40773     vector int vec_eqv (vector int, vector int);
40774     vector int vec_eqv (vector bool int, vector int);
40775     vector int vec_eqv (vector int, vector bool int);
40776     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
40777     vector unsigned int vec_eqv (vector bool unsigned int,
40778                                  vector unsigned int);
40779     vector unsigned int vec_eqv (vector unsigned int,
40780                                  vector bool unsigned int);
40781     vector short vec_eqv (vector short, vector short);
40782     vector short vec_eqv (vector bool short, vector short);
40783     vector short vec_eqv (vector short, vector bool short);
40784     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
40785     vector unsigned short vec_eqv (vector bool unsigned short,
40786                                    vector unsigned short);
40787     vector unsigned short vec_eqv (vector unsigned short,
40788                                    vector bool unsigned short);
40789     vector signed char vec_eqv (vector signed char, vector signed char);
40790     vector signed char vec_eqv (vector bool signed char, vector signed char);
40791     vector signed char vec_eqv (vector signed char, vector bool signed char);
40792     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
40793     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
40794     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
40795
40796     vector long long vec_max (vector long long, vector long long);
40797     vector unsigned long long vec_max (vector unsigned long long,
40798                                        vector unsigned long long);
40799
40800     vector long long vec_min (vector long long, vector long long);
40801     vector unsigned long long vec_min (vector unsigned long long,
40802                                        vector unsigned long long);
40803
40804     vector long long vec_nand (vector long long, vector long long);
40805     vector long long vec_nand (vector bool long long, vector long long);
40806     vector long long vec_nand (vector long long, vector bool long long);
40807     vector unsigned long long vec_nand (vector unsigned long long,
40808                                         vector unsigned long long);
40809     vector unsigned long long vec_nand (vector bool long long,
40810                                        vector unsigned long long);
40811     vector unsigned long long vec_nand (vector unsigned long long,
40812                                         vector bool long long);
40813     vector int vec_nand (vector int, vector int);
40814     vector int vec_nand (vector bool int, vector int);
40815     vector int vec_nand (vector int, vector bool int);
40816     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
40817     vector unsigned int vec_nand (vector bool unsigned int,
40818                                   vector unsigned int);
40819     vector unsigned int vec_nand (vector unsigned int,
40820                                   vector bool unsigned int);
40821     vector short vec_nand (vector short, vector short);
40822     vector short vec_nand (vector bool short, vector short);
40823     vector short vec_nand (vector short, vector bool short);
40824     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
40825     vector unsigned short vec_nand (vector bool unsigned short,
40826                                     vector unsigned short);
40827     vector unsigned short vec_nand (vector unsigned short,
40828                                     vector bool unsigned short);
40829     vector signed char vec_nand (vector signed char, vector signed char);
40830     vector signed char vec_nand (vector bool signed char, vector signed char);
40831     vector signed char vec_nand (vector signed char, vector bool signed char);
40832     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
40833     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
40834     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
40835
40836     vector long long vec_orc (vector long long, vector long long);
40837     vector long long vec_orc (vector bool long long, vector long long);
40838     vector long long vec_orc (vector long long, vector bool long long);
40839     vector unsigned long long vec_orc (vector unsigned long long,
40840                                        vector unsigned long long);
40841     vector unsigned long long vec_orc (vector bool long long,
40842                                        vector unsigned long long);
40843     vector unsigned long long vec_orc (vector unsigned long long,
40844                                        vector bool long long);
40845     vector int vec_orc (vector int, vector int);
40846     vector int vec_orc (vector bool int, vector int);
40847     vector int vec_orc (vector int, vector bool int);
40848     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
40849     vector unsigned int vec_orc (vector bool unsigned int,
40850                                  vector unsigned int);
40851     vector unsigned int vec_orc (vector unsigned int,
40852                                  vector bool unsigned int);
40853     vector short vec_orc (vector short, vector short);
40854     vector short vec_orc (vector bool short, vector short);
40855     vector short vec_orc (vector short, vector bool short);
40856     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
40857     vector unsigned short vec_orc (vector bool unsigned short,
40858                                    vector unsigned short);
40859     vector unsigned short vec_orc (vector unsigned short,
40860                                    vector bool unsigned short);
40861     vector signed char vec_orc (vector signed char, vector signed char);
40862     vector signed char vec_orc (vector bool signed char, vector signed char);
40863     vector signed char vec_orc (vector signed char, vector bool signed char);
40864     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
40865     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
40866     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
40867
40868     vector int vec_pack (vector long long, vector long long);
40869     vector unsigned int vec_pack (vector unsigned long long,
40870                                   vector unsigned long long);
40871     vector bool int vec_pack (vector bool long long, vector bool long long);
40872
40873     vector int vec_packs (vector long long, vector long long);
40874     vector unsigned int vec_packs (vector unsigned long long,
40875                                    vector unsigned long long);
40876
40877     vector unsigned int vec_packsu (vector long long, vector long long);
40878
40879     vector long long vec_rl (vector long long,
40880                              vector unsigned long long);
40881     vector long long vec_rl (vector unsigned long long,
40882                              vector unsigned long long);
40883
40884     vector long long vec_sl (vector long long, vector unsigned long long);
40885     vector long long vec_sl (vector unsigned long long,
40886                              vector unsigned long long);
40887
40888     vector long long vec_sr (vector long long, vector unsigned long long);
40889     vector unsigned long long char vec_sr (vector unsigned long long,
40890                                            vector unsigned long long);
40891
40892     vector long long vec_sra (vector long long, vector unsigned long long);
40893     vector unsigned long long vec_sra (vector unsigned long long,
40894                                        vector unsigned long long);
40895
40896     vector long long vec_sub (vector long long, vector long long);
40897     vector unsigned long long vec_sub (vector unsigned long long,
40898                                        vector unsigned long long);
40899
40900     vector long long vec_unpackh (vector int);
40901     vector unsigned long long vec_unpackh (vector unsigned int);
40902
40903     vector long long vec_unpackl (vector int);
40904     vector unsigned long long vec_unpackl (vector unsigned int);
40905
40906     vector long long vec_vaddudm (vector long long, vector long long);
40907     vector long long vec_vaddudm (vector bool long long, vector long long);
40908     vector long long vec_vaddudm (vector long long, vector bool long long);
40909     vector unsigned long long vec_vaddudm (vector unsigned long long,
40910                                            vector unsigned long long);
40911     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
40912                                            vector unsigned long long);
40913     vector unsigned long long vec_vaddudm (vector unsigned long long,
40914                                            vector bool unsigned long long);
40915
40916     vector long long vec_vbpermq (vector signed char, vector signed char);
40917     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
40918
40919     vector long long vec_vclz (vector long long);
40920     vector unsigned long long vec_vclz (vector unsigned long long);
40921     vector int vec_vclz (vector int);
40922     vector unsigned int vec_vclz (vector int);
40923     vector short vec_vclz (vector short);
40924     vector unsigned short vec_vclz (vector unsigned short);
40925     vector signed char vec_vclz (vector signed char);
40926     vector unsigned char vec_vclz (vector unsigned char);
40927
40928     vector signed char vec_vclzb (vector signed char);
40929     vector unsigned char vec_vclzb (vector unsigned char);
40930
40931     vector long long vec_vclzd (vector long long);
40932     vector unsigned long long vec_vclzd (vector unsigned long long);
40933
40934     vector short vec_vclzh (vector short);
40935     vector unsigned short vec_vclzh (vector unsigned short);
40936
40937     vector int vec_vclzw (vector int);
40938     vector unsigned int vec_vclzw (vector int);
40939
40940     vector signed char vec_vgbbd (vector signed char);
40941     vector unsigned char vec_vgbbd (vector unsigned char);
40942
40943     vector long long vec_vmaxsd (vector long long, vector long long);
40944
40945     vector unsigned long long vec_vmaxud (vector unsigned long long,
40946                                           unsigned vector long long);
40947
40948     vector long long vec_vminsd (vector long long, vector long long);
40949
40950     vector unsigned long long vec_vminud (vector long long,
40951                                           vector long long);
40952
40953     vector int vec_vpksdss (vector long long, vector long long);
40954     vector unsigned int vec_vpksdss (vector long long, vector long long);
40955
40956     vector unsigned int vec_vpkudus (vector unsigned long long,
40957                                      vector unsigned long long);
40958
40959     vector int vec_vpkudum (vector long long, vector long long);
40960     vector unsigned int vec_vpkudum (vector unsigned long long,
40961                                      vector unsigned long long);
40962     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
40963
40964     vector long long vec_vpopcnt (vector long long);
40965     vector unsigned long long vec_vpopcnt (vector unsigned long long);
40966     vector int vec_vpopcnt (vector int);
40967     vector unsigned int vec_vpopcnt (vector int);
40968     vector short vec_vpopcnt (vector short);
40969     vector unsigned short vec_vpopcnt (vector unsigned short);
40970     vector signed char vec_vpopcnt (vector signed char);
40971     vector unsigned char vec_vpopcnt (vector unsigned char);
40972
40973     vector signed char vec_vpopcntb (vector signed char);
40974     vector unsigned char vec_vpopcntb (vector unsigned char);
40975
40976     vector long long vec_vpopcntd (vector long long);
40977     vector unsigned long long vec_vpopcntd (vector unsigned long long);
40978
40979     vector short vec_vpopcnth (vector short);
40980     vector unsigned short vec_vpopcnth (vector unsigned short);
40981
40982     vector int vec_vpopcntw (vector int);
40983     vector unsigned int vec_vpopcntw (vector int);
40984
40985     vector long long vec_vrld (vector long long, vector unsigned long long);
40986     vector unsigned long long vec_vrld (vector unsigned long long,
40987                                         vector unsigned long long);
40988
40989     vector long long vec_vsld (vector long long, vector unsigned long long);
40990     vector long long vec_vsld (vector unsigned long long,
40991                                vector unsigned long long);
40992
40993     vector long long vec_vsrad (vector long long, vector unsigned long long);
40994     vector unsigned long long vec_vsrad (vector unsigned long long,
40995                                          vector unsigned long long);
40996
40997     vector long long vec_vsrd (vector long long, vector unsigned long long);
40998     vector unsigned long long char vec_vsrd (vector unsigned long long,
40999                                              vector unsigned long long);
41000
41001     vector long long vec_vsubudm (vector long long, vector long long);
41002     vector long long vec_vsubudm (vector bool long long, vector long long);
41003     vector long long vec_vsubudm (vector long long, vector bool long long);
41004     vector unsigned long long vec_vsubudm (vector unsigned long long,
41005                                            vector unsigned long long);
41006     vector unsigned long long vec_vsubudm (vector bool long long,
41007                                            vector unsigned long long);
41008     vector unsigned long long vec_vsubudm (vector unsigned long long,
41009                                            vector bool long long);
41010
41011     vector long long vec_vupkhsw (vector int);
41012     vector unsigned long long vec_vupkhsw (vector unsigned int);
41013
41014     vector long long vec_vupklsw (vector int);
41015     vector unsigned long long vec_vupklsw (vector int);
41016
41017 If the ISA 2.07 additions to the vector/scalar (power8-vector)
41018instruction set is available, the following additional functions are
41019available for 64-bit targets.  New vector types (VECTOR __INT128_T and
41020VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T
41021types to use these builtins.
41022
41023 The normal vector extract, and set operations work on VECTOR __INT128_T
41024and VECTOR __UINT128_T types, but the index value must be 0.
41025
41026     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
41027     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
41028
41029     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
41030     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
41031
41032     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
41033                                     vector __int128_t);
41034     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
41035                                      vector __uint128_t);
41036
41037     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
41038                                     vector __int128_t);
41039     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
41040                                      vector __uint128_t);
41041
41042     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
41043                                     vector __int128_t);
41044     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
41045                                      vector __uint128_t);
41046
41047     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
41048                                     vector __int128_t);
41049     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
41050                                      vector __uint128_t);
41051
41052     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
41053     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
41054
41055     __int128_t vec_vsubuqm (__int128_t, __int128_t);
41056     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
41057
41058     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
41059     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
41060     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
41061     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
41062     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
41063     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
41064     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
41065     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
41066     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
41067     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
41068
41069 If the cryptographic instructions are enabled ('-mcrypto' or
41070'-mcpu=power8'), the following builtins are enabled.
41071
41072     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
41073
41074     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
41075                                                         vector unsigned long long);
41076
41077     vector unsigned long long __builtin_crypto_vcipherlast
41078                                          (vector unsigned long long,
41079                                           vector unsigned long long);
41080
41081     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
41082                                                          vector unsigned long long);
41083
41084     vector unsigned long long __builtin_crypto_vncipherlast
41085                                          (vector unsigned long long,
41086                                           vector unsigned long long);
41087
41088     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
41089                                                     vector unsigned char,
41090                                                     vector unsigned char);
41091
41092     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
41093                                                      vector unsigned short,
41094                                                      vector unsigned short);
41095
41096     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
41097                                                    vector unsigned int,
41098                                                    vector unsigned int);
41099
41100     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
41101                                                          vector unsigned long long,
41102                                                          vector unsigned long long);
41103
41104     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
41105                                                    vector unsigned char);
41106
41107     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
41108                                                     vector unsigned short);
41109
41110     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
41111                                                   vector unsigned int);
41112
41113     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
41114                                                         vector unsigned long long);
41115
41116     vector unsigned long long __builtin_crypto_vshasigmad
41117                                    (vector unsigned long long, int, int);
41118
41119     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
41120                                                      int, int);
41121
41122 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
41123__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer
41124that is 0 or 1.  The third argument to these builtin functions must be a
41125constant integer in the range of 0 to 15.
41126
41127
41128File: 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
41129
411306.56.16 PowerPC Hardware Transactional Memory Built-in Functions
41131----------------------------------------------------------------
41132
41133GCC provides two interfaces for accessing the Hardware Transactional
41134Memory (HTM) instructions available on some of the PowerPC family of
41135prcoessors (eg, POWER8).  The two interfaces come in a low level
41136interface, consisting of built-in functions specific to PowerPC and a
41137higher level interface consisting of inline functions that are common
41138between PowerPC and S/390.
41139
411406.56.16.1 PowerPC HTM Low Level Built-in Functions
41141..................................................
41142
41143The following low level built-in functions are available with '-mhtm' or
41144'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
41145machine instruction that is part of the name.
41146
41147 The HTM built-ins return true or false depending on their success and
41148their arguments match exactly the type and order of the associated
41149hardware instruction's operands.  Refer to the ISA manual for a
41150description of each instruction's operands.
41151
41152     unsigned int __builtin_tbegin (unsigned int)
41153     unsigned int __builtin_tend (unsigned int)
41154
41155     unsigned int __builtin_tabort (unsigned int)
41156     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
41157     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
41158     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
41159     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
41160
41161     unsigned int __builtin_tcheck (unsigned int)
41162     unsigned int __builtin_treclaim (unsigned int)
41163     unsigned int __builtin_trechkpt (void)
41164     unsigned int __builtin_tsr (unsigned int)
41165
41166 In addition to the above HTM built-ins, we have added built-ins for
41167some common extended mnemonics of the HTM instructions:
41168
41169     unsigned int __builtin_tendall (void)
41170     unsigned int __builtin_tresume (void)
41171     unsigned int __builtin_tsuspend (void)
41172
41173 The following set of built-in functions are available to gain access to
41174the HTM specific special purpose registers.
41175
41176     unsigned long __builtin_get_texasr (void)
41177     unsigned long __builtin_get_texasru (void)
41178     unsigned long __builtin_get_tfhar (void)
41179     unsigned long __builtin_get_tfiar (void)
41180
41181     void __builtin_set_texasr (unsigned long);
41182     void __builtin_set_texasru (unsigned long);
41183     void __builtin_set_tfhar (unsigned long);
41184     void __builtin_set_tfiar (unsigned long);
41185
41186 Example usage of these low level built-in functions may look like:
41187
41188     #include <htmintrin.h>
41189
41190     int num_retries = 10;
41191
41192     while (1)
41193       {
41194         if (__builtin_tbegin (0))
41195           {
41196             /* Transaction State Initiated.  */
41197             if (is_locked (lock))
41198               __builtin_tabort (0);
41199             ... transaction code...
41200             __builtin_tend (0);
41201             break;
41202           }
41203         else
41204           {
41205             /* Transaction State Failed.  Use locks if the transaction
41206                failure is "persistent" or we've tried too many times.  */
41207             if (num_retries-- <= 0
41208                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
41209               {
41210                 acquire_lock (lock);
41211                 ... non transactional fallback path...
41212                 release_lock (lock);
41213                 break;
41214               }
41215           }
41216       }
41217
41218 One final built-in function has been added that returns the value of
41219the 2-bit Transaction State field of the Machine Status Register (MSR)
41220as stored in 'CR0'.
41221
41222     unsigned long __builtin_ttest (void)
41223
41224 This built-in can be used to determine the current transaction state
41225using the following code example:
41226
41227     #include <htmintrin.h>
41228
41229     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
41230
41231     if (tx_state == _HTM_TRANSACTIONAL)
41232       {
41233         /* Code to use in transactional state.  */
41234       }
41235     else if (tx_state == _HTM_NONTRANSACTIONAL)
41236       {
41237         /* Code to use in non-transactional state.  */
41238       }
41239     else if (tx_state == _HTM_SUSPENDED)
41240       {
41241         /* Code to use in transaction suspended state.  */
41242       }
41243
412446.56.16.2 PowerPC HTM High Level Inline Functions
41245.................................................
41246
41247The following high level HTM interface is made available by including
41248'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
41249or later.  This interface is common between PowerPC and S/390, allowing
41250users to write one HTM source implementation that can be compiled and
41251executed on either system.
41252
41253     long __TM_simple_begin (void)
41254     long __TM_begin (void* const TM_buff)
41255     long __TM_end (void)
41256     void __TM_abort (void)
41257     void __TM_named_abort (unsigned char const code)
41258     void __TM_resume (void)
41259     void __TM_suspend (void)
41260
41261     long __TM_is_user_abort (void* const TM_buff)
41262     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
41263     long __TM_is_illegal (void* const TM_buff)
41264     long __TM_is_footprint_exceeded (void* const TM_buff)
41265     long __TM_nesting_depth (void* const TM_buff)
41266     long __TM_is_nested_too_deep(void* const TM_buff)
41267     long __TM_is_conflict(void* const TM_buff)
41268     long __TM_is_failure_persistent(void* const TM_buff)
41269     long __TM_failure_address(void* const TM_buff)
41270     long long __TM_failure_code(void* const TM_buff)
41271
41272 Using these common set of HTM inline functions, we can create a more
41273portable version of the HTM example in the previous section that will
41274work on either PowerPC or S/390:
41275
41276     #include <htmxlintrin.h>
41277
41278     int num_retries = 10;
41279     TM_buff_type TM_buff;
41280
41281     while (1)
41282       {
41283         if (__TM_begin (TM_buff))
41284           {
41285             /* Transaction State Initiated.  */
41286             if (is_locked (lock))
41287               __TM_abort ();
41288             ... transaction code...
41289             __TM_end ();
41290             break;
41291           }
41292         else
41293           {
41294             /* Transaction State Failed.  Use locks if the transaction
41295                failure is "persistent" or we've tried too many times.  */
41296             if (num_retries-- <= 0
41297                 || __TM_is_failure_persistent (TM_buff))
41298               {
41299                 acquire_lock (lock);
41300                 ... non transactional fallback path...
41301                 release_lock (lock);
41302                 break;
41303               }
41304           }
41305       }
41306
41307
41308File: 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
41309
413106.56.17 RX Built-in Functions
41311-----------------------------
41312
41313GCC supports some of the RX instructions which cannot be expressed in
41314the C programming language via the use of built-in functions.  The
41315following functions are supported:
41316
41317 -- Built-in Function: void __builtin_rx_brk (void)
41318     Generates the 'brk' machine instruction.
41319
41320 -- Built-in Function: void __builtin_rx_clrpsw (int)
41321     Generates the 'clrpsw' machine instruction to clear the specified
41322     bit in the processor status word.
41323
41324 -- Built-in Function: void __builtin_rx_int (int)
41325     Generates the 'int' machine instruction to generate an interrupt
41326     with the specified value.
41327
41328 -- Built-in Function: void __builtin_rx_machi (int, int)
41329     Generates the 'machi' machine instruction to add the result of
41330     multiplying the top 16 bits of the two arguments into the
41331     accumulator.
41332
41333 -- Built-in Function: void __builtin_rx_maclo (int, int)
41334     Generates the 'maclo' machine instruction to add the result of
41335     multiplying the bottom 16 bits of the two arguments into the
41336     accumulator.
41337
41338 -- Built-in Function: void __builtin_rx_mulhi (int, int)
41339     Generates the 'mulhi' machine instruction to place the result of
41340     multiplying the top 16 bits of the two arguments into the
41341     accumulator.
41342
41343 -- Built-in Function: void __builtin_rx_mullo (int, int)
41344     Generates the 'mullo' machine instruction to place the result of
41345     multiplying the bottom 16 bits of the two arguments into the
41346     accumulator.
41347
41348 -- Built-in Function: int __builtin_rx_mvfachi (void)
41349     Generates the 'mvfachi' machine instruction to read the top 32 bits
41350     of the accumulator.
41351
41352 -- Built-in Function: int __builtin_rx_mvfacmi (void)
41353     Generates the 'mvfacmi' machine instruction to read the middle 32
41354     bits of the accumulator.
41355
41356 -- Built-in Function: int __builtin_rx_mvfc (int)
41357     Generates the 'mvfc' machine instruction which reads the control
41358     register specified in its argument and returns its value.
41359
41360 -- Built-in Function: void __builtin_rx_mvtachi (int)
41361     Generates the 'mvtachi' machine instruction to set the top 32 bits
41362     of the accumulator.
41363
41364 -- Built-in Function: void __builtin_rx_mvtaclo (int)
41365     Generates the 'mvtaclo' machine instruction to set the bottom 32
41366     bits of the accumulator.
41367
41368 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
41369     Generates the 'mvtc' machine instruction which sets control
41370     register number 'reg' to 'val'.
41371
41372 -- Built-in Function: void __builtin_rx_mvtipl (int)
41373     Generates the 'mvtipl' machine instruction set the interrupt
41374     priority level.
41375
41376 -- Built-in Function: void __builtin_rx_racw (int)
41377     Generates the 'racw' machine instruction to round the accumulator
41378     according to the specified mode.
41379
41380 -- Built-in Function: int __builtin_rx_revw (int)
41381     Generates the 'revw' machine instruction which swaps the bytes in
41382     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
41383     and also bits 16-23 occupy bits 24-31 and vice versa.
41384
41385 -- Built-in Function: void __builtin_rx_rmpa (void)
41386     Generates the 'rmpa' machine instruction which initiates a repeated
41387     multiply and accumulate sequence.
41388
41389 -- Built-in Function: void __builtin_rx_round (float)
41390     Generates the 'round' machine instruction which returns the
41391     floating-point argument rounded according to the current rounding
41392     mode set in the floating-point status word register.
41393
41394 -- Built-in Function: int __builtin_rx_sat (int)
41395     Generates the 'sat' machine instruction which returns the saturated
41396     value of the argument.
41397
41398 -- Built-in Function: void __builtin_rx_setpsw (int)
41399     Generates the 'setpsw' machine instruction to set the specified bit
41400     in the processor status word.
41401
41402 -- Built-in Function: void __builtin_rx_wait (void)
41403     Generates the 'wait' machine instruction.
41404
41405
41406File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
41407
414086.56.18 S/390 System z Built-in Functions
41409-----------------------------------------
41410
41411 -- Built-in Function: int __builtin_tbegin (void*)
41412     Generates the 'tbegin' machine instruction starting a
41413     non-constraint hardware transaction.  If the parameter is non-NULL
41414     the memory area is used to store the transaction diagnostic buffer
41415     and will be passed as first operand to 'tbegin'.  This buffer can
41416     be defined using the 'struct __htm_tdb' C struct defined in
41417     'htmintrin.h' and must reside on a double-word boundary.  The
41418     second tbegin operand is set to '0xff0c'.  This enables
41419     save/restore of all GPRs and disables aborts for FPR and AR
41420     manipulations inside the transaction body.  The condition code set
41421     by the tbegin instruction is returned as integer value.  The tbegin
41422     instruction by definition overwrites the content of all FPRs.  The
41423     compiler will generate code which saves and restores the FPRs.  For
41424     soft-float code it is recommended to used the '*_nofloat' variant.
41425     In order to prevent a TDB from being written it is required to pass
41426     an constant zero value as parameter.  Passing the zero value
41427     through a variable is not sufficient.  Although modifications of
41428     access registers inside the transaction will not trigger an
41429     transaction abort it is not supported to actually modify them.
41430     Access registers do not get saved when entering a transaction.
41431     They will have undefined state when reaching the abort code.
41432
41433 Macros for the possible return codes of tbegin are defined in the
41434'htmintrin.h' header file:
41435
41436'_HTM_TBEGIN_STARTED'
41437     'tbegin' has been executed as part of normal processing.  The
41438     transaction body is supposed to be executed.
41439'_HTM_TBEGIN_INDETERMINATE'
41440     The transaction was aborted due to an indeterminate condition which
41441     might be persistent.
41442'_HTM_TBEGIN_TRANSIENT'
41443     The transaction aborted due to a transient failure.  The
41444     transaction should be re-executed in that case.
41445'_HTM_TBEGIN_PERSISTENT'
41446     The transaction aborted due to a persistent failure.  Re-execution
41447     under same circumstances will not be productive.
41448
41449 -- Macro: _HTM_FIRST_USER_ABORT_CODE
41450     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
41451     the first abort code which can be used for '__builtin_tabort'.
41452     Values below this threshold are reserved for machine use.
41453
41454 -- Data type: struct __htm_tdb
41455     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
41456     structure of the transaction diagnostic block as specified in the
41457     Principles of Operation manual chapter 5-91.
41458
41459 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
41460     Same as '__builtin_tbegin' but without FPR saves and restores.
41461     Using this variant in code making use of FPRs will leave the FPRs
41462     in undefined state when entering the transaction abort handler
41463     code.
41464
41465 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
41466     In addition to '__builtin_tbegin' a loop for transient failures is
41467     generated.  If tbegin returns a condition code of 2 the transaction
41468     will be retried as often as specified in the second argument.  The
41469     perform processor assist instruction is used to tell the CPU about
41470     the number of fails so far.
41471
41472 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
41473     Same as '__builtin_tbegin_retry' but without FPR saves and
41474     restores.  Using this variant in code making use of FPRs will leave
41475     the FPRs in undefined state when entering the transaction abort
41476     handler code.
41477
41478 -- Built-in Function: void __builtin_tbeginc (void)
41479     Generates the 'tbeginc' machine instruction starting a constraint
41480     hardware transaction.  The second operand is set to '0xff08'.
41481
41482 -- Built-in Function: int __builtin_tend (void)
41483     Generates the 'tend' machine instruction finishing a transaction
41484     and making the changes visible to other threads.  The condition
41485     code generated by tend is returned as integer value.
41486
41487 -- Built-in Function: void __builtin_tabort (int)
41488     Generates the 'tabort' machine instruction with the specified abort
41489     code.  Abort codes from 0 through 255 are reserved and will result
41490     in an error message.
41491
41492 -- Built-in Function: void __builtin_tx_assist (int)
41493     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
41494     parameter is loaded into rX and a value of zero is loaded into rY.
41495     The integer parameter specifies the number of times the transaction
41496     repeatedly aborted.
41497
41498 -- Built-in Function: int __builtin_tx_nesting_depth (void)
41499     Generates the 'etnd' machine instruction.  The current nesting
41500     depth is returned as integer value.  For a nesting depth of 0 the
41501     code is not executed as part of an transaction.
41502
41503 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
41504          uint64_t)
41505
41506     Generates the 'ntstg' machine instruction.  The second argument is
41507     written to the first arguments location.  The store operation will
41508     not be rolled-back in case of an transaction abort.
41509
41510
41511File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
41512
415136.56.19 SH Built-in Functions
41514-----------------------------
41515
41516The following built-in functions are supported on the SH1, SH2, SH3 and
41517SH4 families of processors:
41518
41519 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
41520     Sets the 'GBR' register to the specified value PTR.  This is
41521     usually used by system code that manages threads and execution
41522     contexts.  The compiler normally does not generate code that
41523     modifies the contents of 'GBR' and thus the value is preserved
41524     across function calls.  Changing the 'GBR' value in user code must
41525     be done with caution, since the compiler might use 'GBR' in order
41526     to access thread local variables.
41527
41528 -- Built-in Function: void * __builtin_thread_pointer (void)
41529     Returns the value that is currently set in the 'GBR' register.
41530     Memory loads and stores that use the thread pointer as a base
41531     address are turned into 'GBR' based displacement loads and stores,
41532     if possible.  For example:
41533          struct my_tcb
41534          {
41535             int a, b, c, d, e;
41536          };
41537
41538          int get_tcb_value (void)
41539          {
41540            // Generate 'mov.l @(8,gbr),r0' instruction
41541            return ((my_tcb*)__builtin_thread_pointer ())->c;
41542          }
41543
41544
41545
41546File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
41547
415486.56.20 SPARC VIS Built-in Functions
41549------------------------------------
41550
41551GCC supports SIMD operations on the SPARC using both the generic vector
41552extensions (*note Vector Extensions::) as well as built-in functions for
41553the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
41554the VIS extension is exposed as the following built-in functions:
41555
41556     typedef int v1si __attribute__ ((vector_size (4)));
41557     typedef int v2si __attribute__ ((vector_size (8)));
41558     typedef short v4hi __attribute__ ((vector_size (8)));
41559     typedef short v2hi __attribute__ ((vector_size (4)));
41560     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
41561     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
41562
41563     void __builtin_vis_write_gsr (int64_t);
41564     int64_t __builtin_vis_read_gsr (void);
41565
41566     void * __builtin_vis_alignaddr (void *, long);
41567     void * __builtin_vis_alignaddrl (void *, long);
41568     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
41569     v2si __builtin_vis_faligndatav2si (v2si, v2si);
41570     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
41571     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
41572
41573     v4hi __builtin_vis_fexpand (v4qi);
41574
41575     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
41576     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
41577     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
41578     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
41579     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
41580     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
41581     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
41582
41583     v4qi __builtin_vis_fpack16 (v4hi);
41584     v8qi __builtin_vis_fpack32 (v2si, v8qi);
41585     v2hi __builtin_vis_fpackfix (v2si);
41586     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
41587
41588     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
41589
41590     long __builtin_vis_edge8 (void *, void *);
41591     long __builtin_vis_edge8l (void *, void *);
41592     long __builtin_vis_edge16 (void *, void *);
41593     long __builtin_vis_edge16l (void *, void *);
41594     long __builtin_vis_edge32 (void *, void *);
41595     long __builtin_vis_edge32l (void *, void *);
41596
41597     long __builtin_vis_fcmple16 (v4hi, v4hi);
41598     long __builtin_vis_fcmple32 (v2si, v2si);
41599     long __builtin_vis_fcmpne16 (v4hi, v4hi);
41600     long __builtin_vis_fcmpne32 (v2si, v2si);
41601     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
41602     long __builtin_vis_fcmpgt32 (v2si, v2si);
41603     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
41604     long __builtin_vis_fcmpeq32 (v2si, v2si);
41605
41606     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
41607     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
41608     v2si __builtin_vis_fpadd32 (v2si, v2si);
41609     v1si __builtin_vis_fpadd32s (v1si, v1si);
41610     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
41611     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
41612     v2si __builtin_vis_fpsub32 (v2si, v2si);
41613     v1si __builtin_vis_fpsub32s (v1si, v1si);
41614
41615     long __builtin_vis_array8 (long, long);
41616     long __builtin_vis_array16 (long, long);
41617     long __builtin_vis_array32 (long, long);
41618
41619 When you use the '-mvis2' switch, the VIS version 2.0 built-in
41620functions also become available:
41621
41622     long __builtin_vis_bmask (long, long);
41623     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
41624     v2si __builtin_vis_bshufflev2si (v2si, v2si);
41625     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
41626     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
41627
41628     long __builtin_vis_edge8n (void *, void *);
41629     long __builtin_vis_edge8ln (void *, void *);
41630     long __builtin_vis_edge16n (void *, void *);
41631     long __builtin_vis_edge16ln (void *, void *);
41632     long __builtin_vis_edge32n (void *, void *);
41633     long __builtin_vis_edge32ln (void *, void *);
41634
41635 When you use the '-mvis3' switch, the VIS version 3.0 built-in
41636functions also become available:
41637
41638     void __builtin_vis_cmask8 (long);
41639     void __builtin_vis_cmask16 (long);
41640     void __builtin_vis_cmask32 (long);
41641
41642     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
41643
41644     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
41645     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
41646     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
41647     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
41648     v2si __builtin_vis_fsll16 (v2si, v2si);
41649     v2si __builtin_vis_fslas16 (v2si, v2si);
41650     v2si __builtin_vis_fsrl16 (v2si, v2si);
41651     v2si __builtin_vis_fsra16 (v2si, v2si);
41652
41653     long __builtin_vis_pdistn (v8qi, v8qi);
41654
41655     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
41656
41657     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
41658     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
41659
41660     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
41661     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
41662     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
41663     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
41664     v2si __builtin_vis_fpadds32 (v2si, v2si);
41665     v1si __builtin_vis_fpadds32s (v1si, v1si);
41666     v2si __builtin_vis_fpsubs32 (v2si, v2si);
41667     v1si __builtin_vis_fpsubs32s (v1si, v1si);
41668
41669     long __builtin_vis_fucmple8 (v8qi, v8qi);
41670     long __builtin_vis_fucmpne8 (v8qi, v8qi);
41671     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
41672     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
41673
41674     float __builtin_vis_fhadds (float, float);
41675     double __builtin_vis_fhaddd (double, double);
41676     float __builtin_vis_fhsubs (float, float);
41677     double __builtin_vis_fhsubd (double, double);
41678     float __builtin_vis_fnhadds (float, float);
41679     double __builtin_vis_fnhaddd (double, double);
41680
41681     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
41682     int64_t __builtin_vis_xmulx (int64_t, int64_t);
41683     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
41684
41685
41686File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
41687
416886.56.21 SPU Built-in Functions
41689------------------------------
41690
41691GCC provides extensions for the SPU processor as described in the
41692Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
41693found at <http://cell.scei.co.jp/> or
41694<http://www.ibm.com/developerworks/power/cell/>.  GCC's implementation
41695differs in several ways.
41696
41697   * The optional extension of specifying vector constants in
41698     parentheses is not supported.
41699
41700   * A vector initializer requires no cast if the vector constant is of
41701     the same type as the variable it is initializing.
41702
41703   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
41704     type is the default signedness of the base type.  The default
41705     varies depending on the operating system, so a portable program
41706     should always specify the signedness.
41707
41708   * By default, the keyword '__vector' is added.  The macro 'vector' is
41709     defined in '<spu_intrinsics.h>' and can be undefined.
41710
41711   * GCC allows using a 'typedef' name as the type specifier for a
41712     vector type.
41713
41714   * For C, overloaded functions are implemented with macros so the
41715     following does not work:
41716
41717            spu_add ((vector signed int){1, 2, 3, 4}, foo);
41718
41719     Since 'spu_add' is a macro, the vector constant in the example is
41720     treated as four separate arguments.  Wrap the entire argument in
41721     parentheses for this to work.
41722
41723   * The extended version of '__builtin_expect' is not supported.
41724
41725 _Note:_ Only the interface described in the aforementioned
41726specification is supported.  Internally, GCC uses built-in functions to
41727implement the required functionality, but these are not supported and
41728are subject to change without notice.
41729
41730
41731File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
41732
417336.56.22 TI C6X Built-in Functions
41734---------------------------------
41735
41736GCC provides intrinsics to access certain instructions of the TI C6X
41737processors.  These intrinsics, listed below, are available after
41738inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
41739C6X instructions.
41740
41741
41742     int _sadd (int, int)
41743     int _ssub (int, int)
41744     int _sadd2 (int, int)
41745     int _ssub2 (int, int)
41746     long long _mpy2 (int, int)
41747     long long _smpy2 (int, int)
41748     int _add4 (int, int)
41749     int _sub4 (int, int)
41750     int _saddu4 (int, int)
41751
41752     int _smpy (int, int)
41753     int _smpyh (int, int)
41754     int _smpyhl (int, int)
41755     int _smpylh (int, int)
41756
41757     int _sshl (int, int)
41758     int _subc (int, int)
41759
41760     int _avg2 (int, int)
41761     int _avgu4 (int, int)
41762
41763     int _clrr (int, int)
41764     int _extr (int, int)
41765     int _extru (int, int)
41766     int _abs (int)
41767     int _abs2 (int)
41768
41769
41770
41771File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
41772
417736.56.23 TILE-Gx Built-in Functions
41774----------------------------------
41775
41776GCC provides intrinsics to access every instruction of the TILE-Gx
41777processor.  The intrinsics are of the form:
41778
41779
41780     unsigned long long __insn_OP (...)
41781
41782
41783 Where OP is the name of the instruction.  Refer to the ISA manual for
41784the complete list of instructions.
41785
41786 GCC also provides intrinsics to directly access the network registers.
41787The intrinsics are:
41788
41789
41790     unsigned long long __tile_idn0_receive (void)
41791     unsigned long long __tile_idn1_receive (void)
41792     unsigned long long __tile_udn0_receive (void)
41793     unsigned long long __tile_udn1_receive (void)
41794     unsigned long long __tile_udn2_receive (void)
41795     unsigned long long __tile_udn3_receive (void)
41796     void __tile_idn_send (unsigned long long)
41797     void __tile_udn_send (unsigned long long)
41798
41799
41800 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
41801that no network operations before it are reordered with those after it.
41802
41803
41804File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
41805
418066.56.24 TILEPro Built-in Functions
41807----------------------------------
41808
41809GCC provides intrinsics to access every instruction of the TILEPro
41810processor.  The intrinsics are of the form:
41811
41812
41813     unsigned __insn_OP (...)
41814
41815
41816where OP is the name of the instruction.  Refer to the ISA manual for
41817the complete list of instructions.
41818
41819 GCC also provides intrinsics to directly access the network registers.
41820The intrinsics are:
41821
41822
41823     unsigned __tile_idn0_receive (void)
41824     unsigned __tile_idn1_receive (void)
41825     unsigned __tile_sn_receive (void)
41826     unsigned __tile_udn0_receive (void)
41827     unsigned __tile_udn1_receive (void)
41828     unsigned __tile_udn2_receive (void)
41829     unsigned __tile_udn3_receive (void)
41830     void __tile_idn_send (unsigned)
41831     void __tile_sn_send (unsigned)
41832     void __tile_udn_send (unsigned)
41833
41834
41835 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
41836that no network operations before it are reordered with those after it.
41837
41838
41839File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
41840
418416.57 Format Checks Specific to Particular Target Machines
41842=========================================================
41843
41844For some target machines, GCC supports additional options to the format
41845attribute (*note Declaring Attributes of Functions: Function
41846Attributes.).
41847
41848* Menu:
41849
41850* Solaris Format Checks::
41851* Darwin Format Checks::
41852
41853
41854File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
41855
418566.57.1 Solaris Format Checks
41857----------------------------
41858
41859Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
41860'cmn_err' accepts a subset of the standard 'printf' conversions, and the
41861two-argument '%b' conversion for displaying bit-fields.  See the Solaris
41862man page for 'cmn_err' for more information.
41863
41864
41865File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
41866
418676.57.2 Darwin Format Checks
41868---------------------------
41869
41870Darwin targets support the 'CFString' (or '__CFString__') in the format
41871attribute context.  Declarations made with such attribution are parsed
41872for correct syntax and format argument types.  However, parsing of the
41873format string itself is currently undefined and is not carried out by
41874this version of the compiler.
41875
41876 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
41877may also be used as format arguments.  Note that the relevant headers
41878are only likely to be available on Darwin (OSX) installations.  On such
41879installations, the XCode and system documentation provide descriptions
41880of 'CFString', 'CFStringRefs' and associated functions.
41881
41882
41883File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
41884
418856.58 Pragmas Accepted by GCC
41886============================
41887
41888GCC supports several types of pragmas, primarily in order to compile
41889code originally written for other compilers.  Note that in general we do
41890not recommend the use of pragmas; *Note Function Attributes::, for
41891further explanation.
41892
41893* Menu:
41894
41895* ARM Pragmas::
41896* M32C Pragmas::
41897* MeP Pragmas::
41898* RS/6000 and PowerPC Pragmas::
41899* Darwin Pragmas::
41900* Solaris Pragmas::
41901* Symbol-Renaming Pragmas::
41902* Structure-Packing Pragmas::
41903* Weak Pragmas::
41904* Diagnostic Pragmas::
41905* Visibility Pragmas::
41906* Push/Pop Macro Pragmas::
41907* Function Specific Option Pragmas::
41908
41909
41910File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
41911
419126.58.1 ARM Pragmas
41913------------------
41914
41915The ARM target defines pragmas for controlling the default addition of
41916'long_call' and 'short_call' attributes to functions.  *Note Function
41917Attributes::, for information about the effects of these attributes.
41918
41919'long_calls'
41920     Set all subsequent functions to have the 'long_call' attribute.
41921
41922'no_long_calls'
41923     Set all subsequent functions to have the 'short_call' attribute.
41924
41925'long_calls_off'
41926     Do not affect the 'long_call' or 'short_call' attributes of
41927     subsequent functions.
41928
41929
41930File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
41931
419326.58.2 M32C Pragmas
41933-------------------
41934
41935'GCC memregs NUMBER'
41936     Overrides the command-line option '-memregs=' for the current file.
41937     Use with care!  This pragma must be before any function in the
41938     file, and mixing different memregs values in different objects may
41939     make them incompatible.  This pragma is useful when a
41940     performance-critical function uses a memreg for temporary values,
41941     as it may allow you to reduce the number of memregs used.
41942
41943'ADDRESS NAME ADDRESS'
41944     For any declared symbols matching NAME, this does three things to
41945     that symbol: it forces the symbol to be located at the given
41946     address (a number), it forces the symbol to be volatile, and it
41947     changes the symbol's scope to be static.  This pragma exists for
41948     compatibility with other compilers, but note that the common
41949     '1234H' numeric syntax is not supported (use '0x1234' instead).
41950     Example:
41951
41952          #pragma ADDRESS port3 0x103
41953          char port3;
41954
41955
41956File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
41957
419586.58.3 MeP Pragmas
41959------------------
41960
41961'custom io_volatile (on|off)'
41962     Overrides the command-line option '-mio-volatile' for the current
41963     file.  Note that for compatibility with future GCC releases, this
41964     option should only be used once before any 'io' variables in each
41965     file.
41966
41967'GCC coprocessor available REGISTERS'
41968     Specifies which coprocessor registers are available to the register
41969     allocator.  REGISTERS may be a single register, register range
41970     separated by ellipses, or comma-separated list of those.  Example:
41971
41972          #pragma GCC coprocessor available $c0...$c10, $c28
41973
41974'GCC coprocessor call_saved REGISTERS'
41975     Specifies which coprocessor registers are to be saved and restored
41976     by any function using them.  REGISTERS may be a single register,
41977     register range separated by ellipses, or comma-separated list of
41978     those.  Example:
41979
41980          #pragma GCC coprocessor call_saved $c4...$c6, $c31
41981
41982'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
41983     Creates and defines a register class.  These register classes can
41984     be used by inline 'asm' constructs.  REGISTERS may be a single
41985     register, register range separated by ellipses, or comma-separated
41986     list of those.  Example:
41987
41988          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
41989
41990          asm ("cpfoo %0" : "=B" (x));
41991
41992'GCC disinterrupt NAME , NAME ...'
41993     For the named functions, the compiler adds code to disable
41994     interrupts for the duration of those functions.  If any functions
41995     so named are not encountered in the source, a warning is emitted
41996     that the pragma is not used.  Examples:
41997
41998          #pragma disinterrupt foo
41999          #pragma disinterrupt bar, grill
42000          int foo () { ... }
42001
42002'GCC call NAME , NAME ...'
42003     For the named functions, the compiler always uses a
42004     register-indirect call model when calling the named functions.
42005     Examples:
42006
42007          extern int foo ();
42008          #pragma call foo
42009
42010
42011File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
42012
420136.58.4 RS/6000 and PowerPC Pragmas
42014----------------------------------
42015
42016The RS/6000 and PowerPC targets define one pragma for controlling
42017whether or not the 'longcall' attribute is added to function
42018declarations by default.  This pragma overrides the '-mlongcall' option,
42019but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
42020PowerPC Options::, for more information about when long calls are and
42021are not necessary.
42022
42023'longcall (1)'
42024     Apply the 'longcall' attribute to all subsequent function
42025     declarations.
42026
42027'longcall (0)'
42028     Do not apply the 'longcall' attribute to subsequent function
42029     declarations.
42030
42031
42032File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
42033
420346.58.5 Darwin Pragmas
42035---------------------
42036
42037The following pragmas are available for all architectures running the
42038Darwin operating system.  These are useful for compatibility with other
42039Mac OS compilers.
42040
42041'mark TOKENS...'
42042     This pragma is accepted, but has no effect.
42043
42044'options align=ALIGNMENT'
42045     This pragma sets the alignment of fields in structures.  The values
42046     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
42047     'power', to emulate PowerPC alignment.  Uses of this pragma nest
42048     properly; to restore the previous setting, use 'reset' for the
42049     ALIGNMENT.
42050
42051'segment TOKENS...'
42052     This pragma is accepted, but has no effect.
42053
42054'unused (VAR [, VAR]...)'
42055     This pragma declares variables to be possibly unused.  GCC does not
42056     produce warnings for the listed variables.  The effect is similar
42057     to that of the 'unused' attribute, except that this pragma may
42058     appear anywhere within the variables' scopes.
42059
42060
42061File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
42062
420636.58.6 Solaris Pragmas
42064----------------------
42065
42066The Solaris target supports '#pragma redefine_extname' (*note
42067Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
42068directives for compatibility with the system compiler.
42069
42070'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
42071
42072     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
42073     is the same as GCC's 'aligned' attribute *note Variable
42074     Attributes::).  Macro expansion occurs on the arguments to this
42075     pragma when compiling C and Objective-C.  It does not currently
42076     occur when compiling C++, but this is a bug which may be fixed in a
42077     future release.
42078
42079'fini (FUNCTION [, FUNCTION]...)'
42080
42081     This pragma causes each listed FUNCTION to be called after main, or
42082     during shared module unloading, by adding a call to the '.fini'
42083     section.
42084
42085'init (FUNCTION [, FUNCTION]...)'
42086
42087     This pragma causes each listed FUNCTION to be called during
42088     initialization (before 'main') or during shared module loading, by
42089     adding a call to the '.init' section.
42090
42091
42092File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
42093
420946.58.7 Symbol-Renaming Pragmas
42095------------------------------
42096
42097For compatibility with the Solaris system headers, GCC supports two
42098'#pragma' directives that change the name used in assembly for a given
42099declaration.  To get this effect on all platforms supported by GCC, use
42100the asm labels extension (*note Asm Labels::).
42101
42102'redefine_extname OLDNAME NEWNAME'
42103
42104     This pragma gives the C function OLDNAME the assembly symbol
42105     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
42106     defined if this pragma is available (currently on all platforms).
42107
42108 This pragma and the asm labels extension interact in a complicated
42109manner.  Here are some corner cases you may want to be aware of.
42110
42111  1. Both pragmas silently apply only to declarations with external
42112     linkage.  Asm labels do not have this restriction.
42113
42114  2. In C++, both pragmas silently apply only to declarations with "C"
42115     linkage.  Again, asm labels do not have this restriction.
42116
42117  3. If any of the three ways of changing the assembly name of a
42118     declaration is applied to a declaration whose assembly name has
42119     already been determined (either by a previous use of one of these
42120     features, or because the compiler needed the assembly name in order
42121     to generate code), and the new name is different, a warning issues
42122     and the name does not change.
42123
42124  4. The OLDNAME used by '#pragma redefine_extname' is always the
42125     C-language name.
42126
42127
42128File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
42129
421306.58.8 Structure-Packing Pragmas
42131--------------------------------
42132
42133For compatibility with Microsoft Windows compilers, GCC supports a set
42134of '#pragma' directives that change the maximum alignment of members of
42135structures (other than zero-width bit-fields), unions, and classes
42136subsequently defined.  The N value below always is required to be a
42137small power of two and specifies the new alignment in bytes.
42138
42139  1. '#pragma pack(N)' simply sets the new alignment.
42140  2. '#pragma pack()' sets the alignment to the one that was in effect
42141     when compilation started (see also command-line option
42142     '-fpack-struct[=N]' *note Code Gen Options::).
42143  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
42144     internal stack and then optionally sets the new alignment.
42145  4. '#pragma pack(pop)' restores the alignment setting to the one saved
42146     at the top of the internal stack (and removes that stack entry).
42147     Note that '#pragma pack([N])' does not influence this internal
42148     stack; thus it is possible to have '#pragma pack(push)' followed by
42149     multiple '#pragma pack(N)' instances and finalized by a single
42150     '#pragma pack(pop)'.
42151
42152 Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma'
42153which lays out a structure as the documented '__attribute__
42154((ms_struct))'.
42155  1. '#pragma ms_struct on' turns on the layout for structures declared.
42156  2. '#pragma ms_struct off' turns off the layout for structures
42157     declared.
42158  3. '#pragma ms_struct reset' goes back to the default layout.
42159
42160
42161File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
42162
421636.58.9 Weak Pragmas
42164-------------------
42165
42166For compatibility with SVR4, GCC supports a set of '#pragma' directives
42167for declaring symbols to be weak, and defining weak aliases.
42168
42169'#pragma weak SYMBOL'
42170     This pragma declares SYMBOL to be weak, as if the declaration had
42171     the attribute of the same name.  The pragma may appear before or
42172     after the declaration of SYMBOL.  It is not an error for SYMBOL to
42173     never be defined at all.
42174
42175'#pragma weak SYMBOL1 = SYMBOL2'
42176     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
42177     an error if SYMBOL2 is not defined in the current translation unit.
42178
42179
42180File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
42181
421826.58.10 Diagnostic Pragmas
42183--------------------------
42184
42185GCC allows the user to selectively enable or disable certain types of
42186diagnostics, and change the kind of the diagnostic.  For example, a
42187project's policy might require that all sources compile with '-Werror'
42188but certain files might have exceptions allowing specific types of
42189warnings.  Or, a project might selectively enable diagnostics and treat
42190them as errors depending on which preprocessor macros are defined.
42191
42192'#pragma GCC diagnostic KIND OPTION'
42193
42194     Modifies the disposition of a diagnostic.  Note that not all
42195     diagnostics are modifiable; at the moment only warnings (normally
42196     controlled by '-W...') can be controlled, and not all of them.  Use
42197     '-fdiagnostics-show-option' to determine which diagnostics are
42198     controllable and which option controls them.
42199
42200     KIND is 'error' to treat this diagnostic as an error, 'warning' to
42201     treat it like a warning (even if '-Werror' is in effect), or
42202     'ignored' if the diagnostic is to be ignored.  OPTION is a double
42203     quoted string that matches the command-line option.
42204
42205          #pragma GCC diagnostic warning "-Wformat"
42206          #pragma GCC diagnostic error "-Wformat"
42207          #pragma GCC diagnostic ignored "-Wformat"
42208
42209     Note that these pragmas override any command-line options.  GCC
42210     keeps track of the location of each pragma, and issues diagnostics
42211     according to the state as of that point in the source file.  Thus,
42212     pragmas occurring after a line do not affect diagnostics caused by
42213     that line.
42214
42215'#pragma GCC diagnostic push'
42216'#pragma GCC diagnostic pop'
42217
42218     Causes GCC to remember the state of the diagnostics as of each
42219     'push', and restore to that point at each 'pop'.  If a 'pop' has no
42220     matching 'push', the command-line options are restored.
42221
42222          #pragma GCC diagnostic error "-Wuninitialized"
42223            foo(a);                       /* error is given for this one */
42224          #pragma GCC diagnostic push
42225          #pragma GCC diagnostic ignored "-Wuninitialized"
42226            foo(b);                       /* no diagnostic for this one */
42227          #pragma GCC diagnostic pop
42228            foo(c);                       /* error is given for this one */
42229          #pragma GCC diagnostic pop
42230            foo(d);                       /* depends on command-line options */
42231
42232 GCC also offers a simple mechanism for printing messages during
42233compilation.
42234
42235'#pragma message STRING'
42236
42237     Prints STRING as a compiler message on compilation.  The message is
42238     informational only, and is neither a compilation warning nor an
42239     error.
42240
42241          #pragma message "Compiling " __FILE__ "..."
42242
42243     STRING may be parenthesized, and is printed with location
42244     information.  For example,
42245
42246          #define DO_PRAGMA(x) _Pragma (#x)
42247          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
42248
42249          TODO(Remember to fix this)
42250
42251     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
42252     fix this'.
42253
42254
42255File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
42256
422576.58.11 Visibility Pragmas
42258--------------------------
42259
42260'#pragma GCC visibility push(VISIBILITY)'
42261'#pragma GCC visibility pop'
42262
42263     This pragma allows the user to set the visibility for multiple
42264     declarations without having to give each a visibility attribute
42265     *Note Function Attributes::, for more information about visibility
42266     and the attribute syntax.
42267
42268     In C++, '#pragma GCC visibility' affects only namespace-scope
42269     declarations.  Class members and template specializations are not
42270     affected; if you want to override the visibility for a particular
42271     member or instantiation, you must use an attribute.
42272
42273
42274File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
42275
422766.58.12 Push/Pop Macro Pragmas
42277------------------------------
42278
42279For compatibility with Microsoft Windows compilers, GCC supports
42280'#pragma push_macro("MACRO_NAME")' and '#pragma
42281pop_macro("MACRO_NAME")'.
42282
42283'#pragma push_macro("MACRO_NAME")'
42284     This pragma saves the value of the macro named as MACRO_NAME to the
42285     top of the stack for this macro.
42286
42287'#pragma pop_macro("MACRO_NAME")'
42288     This pragma sets the value of the macro named as MACRO_NAME to the
42289     value on top of the stack for this macro.  If the stack for
42290     MACRO_NAME is empty, the value of the macro remains unchanged.
42291
42292 For example:
42293
42294     #define X  1
42295     #pragma push_macro("X")
42296     #undef X
42297     #define X -1
42298     #pragma pop_macro("X")
42299     int x [X];
42300
42301In this example, the definition of X as 1 is saved by '#pragma
42302push_macro' and restored by '#pragma pop_macro'.
42303
42304
42305File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
42306
423076.58.13 Function Specific Option Pragmas
42308----------------------------------------
42309
42310'#pragma GCC target ("STRING"...)'
42311
42312     This pragma allows you to set target specific options for functions
42313     defined later in the source file.  One or more strings can be
42314     specified.  Each function that is defined after this point is as if
42315     'attribute((target("STRING")))' was specified for that function.
42316     The parenthesis around the options is optional.  *Note Function
42317     Attributes::, for more information about the 'target' attribute and
42318     the attribute syntax.
42319
42320     The '#pragma GCC target' attribute is not implemented in GCC
42321     versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
42322     PowerPC back ends.  At present, it is not implemented for other
42323     back ends.
42324
42325'#pragma GCC optimize ("STRING"...)'
42326
42327     This pragma allows you to set global optimization options for
42328     functions defined later in the source file.  One or more strings
42329     can be specified.  Each function that is defined after this point
42330     is as if 'attribute((optimize("STRING")))' was specified for that
42331     function.  The parenthesis around the options is optional.  *Note
42332     Function Attributes::, for more information about the 'optimize'
42333     attribute and the attribute syntax.
42334
42335     The '#pragma GCC optimize' pragma is not implemented in GCC
42336     versions earlier than 4.4.
42337
42338'#pragma GCC push_options'
42339'#pragma GCC pop_options'
42340
42341     These pragmas maintain a stack of the current target and
42342     optimization options.  It is intended for include files where you
42343     temporarily want to switch to using a different '#pragma GCC
42344     target' or '#pragma GCC optimize' and then to pop back to the
42345     previous options.
42346
42347     The '#pragma GCC push_options' and '#pragma GCC pop_options'
42348     pragmas are not implemented in GCC versions earlier than 4.4.
42349
42350'#pragma GCC reset_options'
42351
42352     This pragma clears the current '#pragma GCC target' and '#pragma
42353     GCC optimize' to use the default switches as specified on the
42354     command line.
42355
42356     The '#pragma GCC reset_options' pragma is not implemented in GCC
42357     versions earlier than 4.4.
42358
42359
42360File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
42361
423626.59 Unnamed struct/union fields within structs/unions
42363======================================================
42364
42365As permitted by ISO C11 and for compatibility with other compilers, GCC
42366allows you to define a structure or union that contains, as fields,
42367structures and unions without names.  For example:
42368
42369     struct {
42370       int a;
42371       union {
42372         int b;
42373         float c;
42374       };
42375       int d;
42376     } foo;
42377
42378In this example, you are able to access members of the unnamed union
42379with code like 'foo.b'.  Note that only unnamed structs and unions are
42380allowed, you may not have, for example, an unnamed 'int'.
42381
42382 You must never create such structures that cause ambiguous field
42383definitions.  For example, in this structure:
42384
42385     struct {
42386       int a;
42387       struct {
42388         int a;
42389       };
42390     } foo;
42391
42392it is ambiguous which 'a' is being referred to with 'foo.a'.  The
42393compiler gives errors for such constructs.
42394
42395 Unless '-fms-extensions' is used, the unnamed field must be a structure
42396or union definition without a tag (for example, 'struct { int a; };').
42397If '-fms-extensions' is used, the field may also be a definition with a
42398tag such as 'struct foo { int a; };', a reference to a previously
42399defined structure or union such as 'struct foo;', or a reference to a
42400'typedef' name for a previously defined structure or union type.
42401
42402 The option '-fplan9-extensions' enables '-fms-extensions' as well as
42403two other extensions.  First, a pointer to a structure is automatically
42404converted to a pointer to an anonymous field for assignments and
42405function calls.  For example:
42406
42407     struct s1 { int a; };
42408     struct s2 { struct s1; };
42409     extern void f1 (struct s1 *);
42410     void f2 (struct s2 *p) { f1 (p); }
42411
42412In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
42413pointer to the anonymous field.
42414
42415 Second, when the type of an anonymous field is a 'typedef' for a
42416'struct' or 'union', code may refer to the field using the name of the
42417'typedef'.
42418
42419     typedef struct { int a; } s1;
42420     struct s2 { s1; };
42421     s1 f1 (struct s2 *p) { return p->s1; }
42422
42423 These usages are only permitted when they are not ambiguous.
42424
42425
42426File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
42427
424286.60 Thread-Local Storage
42429=========================
42430
42431Thread-local storage (TLS) is a mechanism by which variables are
42432allocated such that there is one instance of the variable per extant
42433thread.  The runtime model GCC uses to implement this originates in the
42434IA-64 processor-specific ABI, but has since been migrated to other
42435processors as well.  It requires significant support from the linker
42436('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
42437'libpthread.so'), so it is not available everywhere.
42438
42439 At the user level, the extension is visible with a new storage class
42440keyword: '__thread'.  For example:
42441
42442     __thread int i;
42443     extern __thread struct state s;
42444     static __thread char *p;
42445
42446 The '__thread' specifier may be used alone, with the 'extern' or
42447'static' specifiers, but with no other storage class specifier.  When
42448used with 'extern' or 'static', '__thread' must appear immediately after
42449the other storage class specifier.
42450
42451 The '__thread' specifier may be applied to any global, file-scoped
42452static, function-scoped static, or static data member of a class.  It
42453may not be applied to block-scoped automatic or non-static data member.
42454
42455 When the address-of operator is applied to a thread-local variable, it
42456is evaluated at run time and returns the address of the current thread's
42457instance of that variable.  An address so obtained may be used by any
42458thread.  When a thread terminates, any pointers to thread-local
42459variables in that thread become invalid.
42460
42461 No static initialization may refer to the address of a thread-local
42462variable.
42463
42464 In C++, if an initializer is present for a thread-local variable, it
42465must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
42466standard.
42467
42468 See ELF Handling For Thread-Local Storage
42469(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
42470the four thread-local storage addressing models, and how the runtime is
42471expected to function.
42472
42473* Menu:
42474
42475* C99 Thread-Local Edits::
42476* C++98 Thread-Local Edits::
42477
42478
42479File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
42480
424816.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
42482-------------------------------------------------------
42483
42484The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
42485document the exact semantics of the language extension.
42486
42487   * '5.1.2 Execution environments'
42488
42489     Add new text after paragraph 1
42490
42491          Within either execution environment, a "thread" is a flow of
42492          control within a program.  It is implementation defined
42493          whether or not there may be more than one thread associated
42494          with a program.  It is implementation defined how threads
42495          beyond the first are created, the name and type of the
42496          function called at thread startup, and how threads may be
42497          terminated.  However, objects with thread storage duration
42498          shall be initialized before thread startup.
42499
42500   * '6.2.4 Storage durations of objects'
42501
42502     Add new text before paragraph 3
42503
42504          An object whose identifier is declared with the storage-class
42505          specifier '__thread' has "thread storage duration".  Its
42506          lifetime is the entire execution of the thread, and its stored
42507          value is initialized only once, prior to thread startup.
42508
42509   * '6.4.1 Keywords'
42510
42511     Add '__thread'.
42512
42513   * '6.7.1 Storage-class specifiers'
42514
42515     Add '__thread' to the list of storage class specifiers in paragraph
42516     1.
42517
42518     Change paragraph 2 to
42519
42520          With the exception of '__thread', at most one storage-class
42521          specifier may be given [...].  The '__thread' specifier may be
42522          used alone, or immediately following 'extern' or 'static'.
42523
42524     Add new text after paragraph 6
42525
42526          The declaration of an identifier for a variable that has block
42527          scope that specifies '__thread' shall also specify either
42528          'extern' or 'static'.
42529
42530          The '__thread' specifier shall be used only with variables.
42531
42532
42533File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
42534
425356.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
42536--------------------------------------------------------
42537
42538The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
42539that document the exact semantics of the language extension.
42540
42541   * [intro.execution]
42542
42543     New text after paragraph 4
42544
42545          A "thread" is a flow of control within the abstract machine.
42546          It is implementation defined whether or not there may be more
42547          than one thread.
42548
42549     New text after paragraph 7
42550
42551          It is unspecified whether additional action must be taken to
42552          ensure when and whether side effects are visible to other
42553          threads.
42554
42555   * [lex.key]
42556
42557     Add '__thread'.
42558
42559   * [basic.start.main]
42560
42561     Add after paragraph 5
42562
42563          The thread that begins execution at the 'main' function is
42564          called the "main thread".  It is implementation defined how
42565          functions beginning threads other than the main thread are
42566          designated or typed.  A function so designated, as well as the
42567          'main' function, is called a "thread startup function".  It is
42568          implementation defined what happens if a thread startup
42569          function returns.  It is implementation defined what happens
42570          to other threads when any thread calls 'exit'.
42571
42572   * [basic.start.init]
42573
42574     Add after paragraph 4
42575
42576          The storage for an object of thread storage duration shall be
42577          statically initialized before the first statement of the
42578          thread startup function.  An object of thread storage duration
42579          shall not require dynamic initialization.
42580
42581   * [basic.start.term]
42582
42583     Add after paragraph 3
42584
42585          The type of an object with thread storage duration shall not
42586          have a non-trivial destructor, nor shall it be an array type
42587          whose elements (directly or indirectly) have non-trivial
42588          destructors.
42589
42590   * [basic.stc]
42591
42592     Add "thread storage duration" to the list in paragraph 1.
42593
42594     Change paragraph 2
42595
42596          Thread, static, and automatic storage durations are associated
42597          with objects introduced by declarations [...].
42598
42599     Add '__thread' to the list of specifiers in paragraph 3.
42600
42601   * [basic.stc.thread]
42602
42603     New section before [basic.stc.static]
42604
42605          The keyword '__thread' applied to a non-local object gives the
42606          object thread storage duration.
42607
42608          A local variable or class data member declared both 'static'
42609          and '__thread' gives the variable or member thread storage
42610          duration.
42611
42612   * [basic.stc.static]
42613
42614     Change paragraph 1
42615
42616          All objects that have neither thread storage duration, dynamic
42617          storage duration nor are local [...].
42618
42619   * [dcl.stc]
42620
42621     Add '__thread' to the list in paragraph 1.
42622
42623     Change paragraph 1
42624
42625          With the exception of '__thread', at most one
42626          STORAGE-CLASS-SPECIFIER shall appear in a given
42627          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
42628          alone, or immediately following the 'extern' or 'static'
42629          specifiers.  [...]
42630
42631     Add after paragraph 5
42632
42633          The '__thread' specifier can be applied only to the names of
42634          objects and to anonymous unions.
42635
42636   * [class.mem]
42637
42638     Add after paragraph 6
42639
42640          Non-'static' members shall not be '__thread'.
42641
42642
42643File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
42644
426456.61 Binary constants using the '0b' prefix
42646===========================================
42647
42648Integer constants can be written as binary constants, consisting of a
42649sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
42650particularly useful in environments that operate a lot on the bit level
42651(like microcontrollers).
42652
42653 The following statements are identical:
42654
42655     i =       42;
42656     i =     0x2a;
42657     i =      052;
42658     i = 0b101010;
42659
42660 The type of these constants follows the same rules as for octal or
42661hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
42662applied.
42663
42664
42665File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
42666
426677 Extensions to the C++ Language
42668********************************
42669
42670The GNU compiler provides these extensions to the C++ language (and you
42671can also use most of the C language extensions in your C++ programs).
42672If you want to write code that checks whether these features are
42673available, you can test for the GNU compiler the same way as for C
42674programs: check for a predefined macro '__GNUC__'.  You can also use
42675'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
42676(cpp)Common Predefined Macros.).
42677
42678* Menu:
42679
42680* C++ Volatiles::       What constitutes an access to a volatile object.
42681* Restricted Pointers:: C99 restricted pointers and references.
42682* Vague Linkage::       Where G++ puts inlines, vtables and such.
42683* C++ Interface::       You can use a single C++ header file for both
42684                        declarations and definitions.
42685* Template Instantiation:: Methods for ensuring that exactly one copy of
42686                        each needed template instantiation is emitted.
42687* Bound member functions:: You can extract a function pointer to the
42688                        method denoted by a '->*' or '.*' expression.
42689* C++ Attributes::      Variable, function, and type attributes for C++ only.
42690* Function Multiversioning::   Declaring multiple function versions.
42691* Namespace Association:: Strong using-directives for namespace association.
42692* Type Traits::         Compiler support for type traits
42693* Java Exceptions::     Tweaking exception handling to work with Java.
42694* Deprecated Features:: Things will disappear from G++.
42695* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
42696
42697
42698File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
42699
427007.1 When is a Volatile C++ Object Accessed?
42701===========================================
42702
42703The C++ standard differs from the C standard in its treatment of
42704volatile objects.  It fails to specify what constitutes a volatile
42705access, except to say that C++ should behave in a similar manner to C
42706with respect to volatiles, where possible.  However, the different
42707lvalueness of expressions between C and C++ complicate the behavior.
42708G++ behaves the same as GCC for volatile access, *Note Volatiles: C
42709Extensions, for a description of GCC's behavior.
42710
42711 The C and C++ language specifications differ when an object is accessed
42712in a void context:
42713
42714     volatile int *src = SOMEVALUE;
42715     *src;
42716
42717 The C++ standard specifies that such expressions do not undergo lvalue
42718to rvalue conversion, and that the type of the dereferenced object may
42719be incomplete.  The C++ standard does not specify explicitly that it is
42720lvalue to rvalue conversion that is responsible for causing an access.
42721There is reason to believe that it is, because otherwise certain simple
42722expressions become undefined.  However, because it would surprise most
42723programmers, G++ treats dereferencing a pointer to volatile object of
42724complete type as GCC would do for an equivalent type in C.  When the
42725object has incomplete type, G++ issues a warning; if you wish to force
42726an error, you must force a conversion to rvalue with, for instance, a
42727static cast.
42728
42729 When using a reference to volatile, G++ does not treat equivalent
42730expressions as accesses to volatiles, but instead issues a warning that
42731no volatile is accessed.  The rationale for this is that otherwise it
42732becomes difficult to determine where volatile access occur, and not
42733possible to ignore the return value from functions returning volatile
42734references.  Again, if you wish to force a read, cast the reference to
42735an rvalue.
42736
42737 G++ implements the same behavior as GCC does when assigning to a
42738volatile object--there is no reread of the assigned-to object, the
42739assigned rvalue is reused.  Note that in C++ assignment expressions are
42740lvalues, and if used as an lvalue, the volatile object is referred to.
42741For instance, VREF refers to VOBJ, as expected, in the following
42742example:
42743
42744     volatile int vobj;
42745     volatile int &vref = vobj = SOMETHING;
42746
42747
42748File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
42749
427507.2 Restricting Pointer Aliasing
42751================================
42752
42753As with the C front end, G++ understands the C99 feature of restricted
42754pointers, specified with the '__restrict__', or '__restrict' type
42755qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
42756language flag, 'restrict' is not a keyword in C++.
42757
42758 In addition to allowing restricted pointers, you can specify restricted
42759references, which indicate that the reference is not aliased in the
42760local context.
42761
42762     void fn (int *__restrict__ rptr, int &__restrict__ rref)
42763     {
42764       /* ... */
42765     }
42766
42767In the body of 'fn', RPTR points to an unaliased integer and RREF refers
42768to a (different) unaliased integer.
42769
42770 You may also specify whether a member function's THIS pointer is
42771unaliased by using '__restrict__' as a member function qualifier.
42772
42773     void T::fn () __restrict__
42774     {
42775       /* ... */
42776     }
42777
42778Within the body of 'T::fn', THIS has the effective definition 'T
42779*__restrict__ const this'.  Notice that the interpretation of a
42780'__restrict__' member function qualifier is different to that of 'const'
42781or 'volatile' qualifier, in that it is applied to the pointer rather
42782than the object.  This is consistent with other compilers that implement
42783restricted pointers.
42784
42785 As with all outermost parameter qualifiers, '__restrict__' is ignored
42786in function definition matching.  This means you only need to specify
42787'__restrict__' in a function definition, rather than in a function
42788prototype as well.
42789
42790
42791File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
42792
427937.3 Vague Linkage
42794=================
42795
42796There are several constructs in C++ that require space in the object
42797file but are not clearly tied to a single translation unit.  We say that
42798these constructs have "vague linkage".  Typically such constructs are
42799emitted wherever they are needed, though sometimes we can be more
42800clever.
42801
42802Inline Functions
42803     Inline functions are typically defined in a header file which can
42804     be included in many different compilations.  Hopefully they can
42805     usually be inlined, but sometimes an out-of-line copy is necessary,
42806     if the address of the function is taken or if inlining fails.  In
42807     general, we emit an out-of-line copy in all translation units where
42808     one is needed.  As an exception, we only emit inline virtual
42809     functions with the vtable, since it always requires a copy.
42810
42811     Local static variables and string constants used in an inline
42812     function are also considered to have vague linkage, since they must
42813     be shared between all inlined and out-of-line instances of the
42814     function.
42815
42816VTables
42817     C++ virtual functions are implemented in most compilers using a
42818     lookup table, known as a vtable.  The vtable contains pointers to
42819     the virtual functions provided by a class, and each object of the
42820     class contains a pointer to its vtable (or vtables, in some
42821     multiple-inheritance situations).  If the class declares any
42822     non-inline, non-pure virtual functions, the first one is chosen as
42823     the "key method" for the class, and the vtable is only emitted in
42824     the translation unit where the key method is defined.
42825
42826     _Note:_ If the chosen key method is later defined as inline, the
42827     vtable is still emitted in every translation unit that defines it.
42828     Make sure that any inline virtuals are declared inline in the class
42829     body, even if they are not defined there.
42830
42831'type_info' objects
42832     C++ requires information about types to be written out in order to
42833     implement 'dynamic_cast', 'typeid' and exception handling.  For
42834     polymorphic classes (classes with virtual functions), the
42835     'type_info' object is written out along with the vtable so that
42836     'dynamic_cast' can determine the dynamic type of a class object at
42837     run time.  For all other types, we write out the 'type_info' object
42838     when it is used: when applying 'typeid' to an expression, throwing
42839     an object, or referring to a type in a catch clause or exception
42840     specification.
42841
42842Template Instantiations
42843     Most everything in this section also applies to template
42844     instantiations, but there are other options as well.  *Note Where's
42845     the Template?: Template Instantiation.
42846
42847 When used with GNU ld version 2.8 or later on an ELF system such as
42848GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
42849these constructs will be discarded at link time.  This is known as
42850COMDAT support.
42851
42852 On targets that don't support COMDAT, but do support weak symbols, GCC
42853uses them.  This way one copy overrides all the others, but the unused
42854copies still take up space in the executable.
42855
42856 For targets that do not support either COMDAT or weak symbols, most
42857entities with vague linkage are emitted as local symbols to avoid
42858duplicate definition errors from the linker.  This does not happen for
42859local statics in inlines, however, as having multiple copies almost
42860certainly breaks things.
42861
42862 *Note Declarations and Definitions in One Header: C++ Interface, for
42863another way to control placement of these constructs.
42864
42865
42866File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
42867
428687.4 #pragma interface and implementation
42869========================================
42870
42871'#pragma interface' and '#pragma implementation' provide the user with a
42872way of explicitly directing the compiler to emit entities with vague
42873linkage (and debugging information) in a particular translation unit.
42874
42875 _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases,
42876because of COMDAT support and the "key method" heuristic mentioned in
42877*note Vague Linkage::.  Using them can actually cause your program to
42878grow due to unnecessary out-of-line copies of inline functions.
42879Currently (3.4) the only benefit of these '#pragma's is reduced
42880duplication of debugging information, and that should be addressed soon
42881on DWARF 2 targets with the use of COMDAT groups.
42882
42883'#pragma interface'
42884'#pragma interface "SUBDIR/OBJECTS.h"'
42885     Use this directive in _header files_ that define object classes, to
42886     save space in most of the object files that use those classes.
42887     Normally, local copies of certain information (backup copies of
42888     inline member functions, debugging information, and the internal
42889     tables that implement virtual functions) must be kept in each
42890     object file that includes class definitions.  You can use this
42891     pragma to avoid such duplication.  When a header file containing
42892     '#pragma interface' is included in a compilation, this auxiliary
42893     information is not generated (unless the main input source file
42894     itself uses '#pragma implementation').  Instead, the object files
42895     contain references to be resolved at link time.
42896
42897     The second form of this directive is useful for the case where you
42898     have multiple headers with the same name in different directories.
42899     If you use this form, you must specify the same string to '#pragma
42900     implementation'.
42901
42902'#pragma implementation'
42903'#pragma implementation "OBJECTS.h"'
42904     Use this pragma in a _main input file_, when you want full output
42905     from included header files to be generated (and made globally
42906     visible).  The included header file, in turn, should use '#pragma
42907     interface'.  Backup copies of inline member functions, debugging
42908     information, and the internal tables used to implement virtual
42909     functions are all generated in implementation files.
42910
42911     If you use '#pragma implementation' with no argument, it applies to
42912     an include file with the same basename(1) as your source file.  For
42913     example, in 'allclass.cc', giving just '#pragma implementation' by
42914     itself is equivalent to '#pragma implementation "allclass.h"'.
42915
42916     In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as
42917     an implementation file whenever you would include it from
42918     'allclass.cc' even if you never specified '#pragma implementation'.
42919     This was deemed to be more trouble than it was worth, however, and
42920     disabled.
42921
42922     Use the string argument if you want a single implementation file to
42923     include code from multiple header files.  (You must also use
42924     '#include' to include the header file; '#pragma implementation'
42925     only specifies how to use the file--it doesn't actually include
42926     it.)
42927
42928     There is no way to split up the contents of a single header file
42929     into multiple implementation files.
42930
42931 '#pragma implementation' and '#pragma interface' also have an effect on
42932function inlining.
42933
42934 If you define a class in a header file marked with '#pragma interface',
42935the effect on an inline function defined in that class is similar to an
42936explicit 'extern' declaration--the compiler emits no code at all to
42937define an independent version of the function.  Its definition is used
42938only for inlining with its callers.
42939
42940 Conversely, when you include the same header file in a main source file
42941that declares it as '#pragma implementation', the compiler emits code
42942for the function itself; this defines a version of the function that can
42943be found via pointers (or by callers compiled without inlining).  If all
42944calls to the function can be inlined, you can avoid emitting the
42945function by compiling with '-fno-implement-inlines'.  If any calls are
42946not inlined, you will get linker errors.
42947
42948   ---------- Footnotes ----------
42949
42950   (1) A file's "basename" is the name stripped of all leading path
42951information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
42952
42953
42954File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
42955
429567.5 Where's the Template?
42957=========================
42958
42959C++ templates are the first language feature to require more
42960intelligence from the environment than one usually finds on a UNIX
42961system.  Somehow the compiler and linker have to make sure that each
42962template instance occurs exactly once in the executable if it is needed,
42963and not at all otherwise.  There are two basic approaches to this
42964problem, which are referred to as the Borland model and the Cfront
42965model.
42966
42967Borland model
42968     Borland C++ solved the template instantiation problem by adding the
42969     code equivalent of common blocks to their linker; the compiler
42970     emits template instances in each translation unit that uses them,
42971     and the linker collapses them together.  The advantage of this
42972     model is that the linker only has to consider the object files
42973     themselves; there is no external complexity to worry about.  This
42974     disadvantage is that compilation time is increased because the
42975     template code is being compiled repeatedly.  Code written for this
42976     model tends to include definitions of all templates in the header
42977     file, since they must be seen to be instantiated.
42978
42979Cfront model
42980     The AT&T C++ translator, Cfront, solved the template instantiation
42981     problem by creating the notion of a template repository, an
42982     automatically maintained place where template instances are stored.
42983     A more modern version of the repository works as follows: As
42984     individual object files are built, the compiler places any template
42985     definitions and instantiations encountered in the repository.  At
42986     link time, the link wrapper adds in the objects in the repository
42987     and compiles any needed instances that were not previously emitted.
42988     The advantages of this model are more optimal compilation speed and
42989     the ability to use the system linker; to implement the Borland
42990     model a compiler vendor also needs to replace the linker.  The
42991     disadvantages are vastly increased complexity, and thus potential
42992     for error; for some code this can be just as transparent, but in
42993     practice it can been very difficult to build multiple programs in
42994     one directory and one program in multiple directories.  Code
42995     written for this model tends to separate definitions of non-inline
42996     member templates into a separate file, which should be compiled
42997     separately.
42998
42999 When used with GNU ld version 2.8 or later on an ELF system such as
43000GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
43001Borland model.  On other systems, G++ implements neither automatic
43002model.
43003
43004 You have the following options for dealing with template
43005instantiations:
43006
43007  1. Compile your template-using code with '-frepo'.  The compiler
43008     generates files with the extension '.rpo' listing all of the
43009     template instantiations used in the corresponding object files that
43010     could be instantiated there; the link wrapper, 'collect2', then
43011     updates the '.rpo' files to tell the compiler where to place those
43012     instantiations and rebuild any affected object files.  The
43013     link-time overhead is negligible after the first pass, as the
43014     compiler continues to place the instantiations in the same files.
43015
43016     This is your best option for application code written for the
43017     Borland model, as it just works.  Code written for the Cfront model
43018     needs to be modified so that the template definitions are available
43019     at one or more points of instantiation; usually this is as simple
43020     as adding '#include <tmethods.cc>' to the end of each template
43021     header.
43022
43023     For library code, if you want the library to provide all of the
43024     template instantiations it needs, just try to link all of its
43025     object files together; the link will fail, but cause the
43026     instantiations to be generated as a side effect.  Be warned,
43027     however, that this may cause conflicts if multiple libraries try to
43028     provide the same instantiations.  For greater control, use explicit
43029     instantiation as described in the next option.
43030
43031  2. Compile your code with '-fno-implicit-templates' to disable the
43032     implicit generation of template instances, and explicitly
43033     instantiate all the ones you use.  This approach requires more
43034     knowledge of exactly which instances you need than do the others,
43035     but it's less mysterious and allows greater control.  You can
43036     scatter the explicit instantiations throughout your program,
43037     perhaps putting them in the translation units where the instances
43038     are used or the translation units that define the templates
43039     themselves; you can put all of the explicit instantiations you need
43040     into one big file; or you can create small files like
43041
43042          #include "Foo.h"
43043          #include "Foo.cc"
43044
43045          template class Foo<int>;
43046          template ostream& operator <<
43047                          (ostream&, const Foo<int>&);
43048
43049     for each of the instances you need, and create a template
43050     instantiation library from those.
43051
43052     If you are using Cfront-model code, you can probably get away with
43053     not using '-fno-implicit-templates' when compiling files that don't
43054     '#include' the member template definitions.
43055
43056     If you use one big file to do the instantiations, you may want to
43057     compile it without '-fno-implicit-templates' so you get all of the
43058     instances required by your explicit instantiations (but not by any
43059     other files) without having to specify them as well.
43060
43061     The ISO C++ 2011 standard allows forward declaration of explicit
43062     instantiations (with 'extern').  G++ supports explicit
43063     instantiation declarations in C++98 mode and has extended the
43064     template instantiation syntax to support instantiation of the
43065     compiler support data for a template class (i.e. the vtable)
43066     without instantiating any of its members (with 'inline'), and
43067     instantiation of only the static data members of a template class,
43068     without the support data or member functions (with ('static'):
43069
43070          extern template int max (int, int);
43071          inline template class Foo<int>;
43072          static template class Foo<int>;
43073
43074  3. Do nothing.  Pretend G++ does implement automatic instantiation
43075     management.  Code written for the Borland model works fine, but
43076     each translation unit contains instances of each of the templates
43077     it uses.  In a large program, this can lead to an unacceptable
43078     amount of code duplication.
43079
43080
43081File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
43082
430837.6 Extracting the function pointer from a bound pointer to member function
43084===========================================================================
43085
43086In C++, pointer to member functions (PMFs) are implemented using a wide
43087pointer of sorts to handle all the possible call mechanisms; the PMF
43088needs to store information about how to adjust the 'this' pointer, and
43089if the function pointed to is virtual, where to find the vtable, and
43090where in the vtable to look for the member function.  If you are using
43091PMFs in an inner loop, you should really reconsider that decision.  If
43092that is not an option, you can extract the pointer to the function that
43093would be called for a given object/PMF pair and call it directly inside
43094the inner loop, to save a bit of time.
43095
43096 Note that you still pay the penalty for the call through a function
43097pointer; on most modern architectures, such a call defeats the branch
43098prediction features of the CPU.  This is also true of normal virtual
43099function calls.
43100
43101 The syntax for this extension is
43102
43103     extern A a;
43104     extern int (A::*fp)();
43105     typedef int (*fptr)(A *);
43106
43107     fptr p = (fptr)(a.*fp);
43108
43109 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
43110object is needed to obtain the address of the function.  They can be
43111converted to function pointers directly:
43112
43113     fptr p1 = (fptr)(&A::foo);
43114
43115 You must specify '-Wno-pmf-conversions' to use this extension.
43116
43117
43118File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
43119
431207.7 C++-Specific Variable, Function, and Type Attributes
43121========================================================
43122
43123Some attributes only make sense for C++ programs.
43124
43125'abi_tag ("TAG", ...)'
43126     The 'abi_tag' attribute can be applied to a function or class
43127     declaration.  It modifies the mangled name of the function or class
43128     to incorporate the tag name, in order to distinguish the function
43129     or class from an earlier version with a different ABI; perhaps the
43130     class has changed size, or the function has a different return type
43131     that is not encoded in the mangled name.
43132
43133     The argument can be a list of strings of arbitrary length.  The
43134     strings are sorted on output, so the order of the list is
43135     unimportant.
43136
43137     A redeclaration of a function or class must not add new ABI tags,
43138     since doing so would change the mangled name.
43139
43140     The '-Wabi-tag' flag enables a warning about a class which does not
43141     have all the ABI tags used by its subobjects and virtual functions;
43142     for users with code that needs to coexist with an earlier ABI,
43143     using this option can help to find all affected types that need to
43144     be tagged.
43145
43146'init_priority (PRIORITY)'
43147
43148     In Standard C++, objects defined at namespace scope are guaranteed
43149     to be initialized in an order in strict accordance with that of
43150     their definitions _in a given translation unit_.  No guarantee is
43151     made for initializations across translation units.  However, GNU
43152     C++ allows users to control the order of initialization of objects
43153     defined at namespace scope with the 'init_priority' attribute by
43154     specifying a relative PRIORITY, a constant integral expression
43155     currently bounded between 101 and 65535 inclusive.  Lower numbers
43156     indicate a higher priority.
43157
43158     In the following example, 'A' would normally be created before 'B',
43159     but the 'init_priority' attribute reverses that order:
43160
43161          Some_Class  A  __attribute__ ((init_priority (2000)));
43162          Some_Class  B  __attribute__ ((init_priority (543)));
43163
43164     Note that the particular values of PRIORITY do not matter; only
43165     their relative ordering.
43166
43167'java_interface'
43168
43169     This type attribute informs C++ that the class is a Java interface.
43170     It may only be applied to classes declared within an 'extern
43171     "Java"' block.  Calls to methods declared in this interface are
43172     dispatched using GCJ's interface table mechanism, instead of
43173     regular virtual table dispatch.
43174
43175 See also *note Namespace Association::.
43176
43177
43178File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
43179
431807.8 Function Multiversioning
43181============================
43182
43183With the GNU C++ front end, for target i386, you may specify multiple
43184versions of a function, where each function is specialized for a
43185specific target feature.  At runtime, the appropriate version of the
43186function is automatically executed depending on the characteristics of
43187the execution platform.  Here is an example.
43188
43189     __attribute__ ((target ("default")))
43190     int foo ()
43191     {
43192       // The default version of foo.
43193       return 0;
43194     }
43195
43196     __attribute__ ((target ("sse4.2")))
43197     int foo ()
43198     {
43199       // foo version for SSE4.2
43200       return 1;
43201     }
43202
43203     __attribute__ ((target ("arch=atom")))
43204     int foo ()
43205     {
43206       // foo version for the Intel ATOM processor
43207       return 2;
43208     }
43209
43210     __attribute__ ((target ("arch=amdfam10")))
43211     int foo ()
43212     {
43213       // foo version for the AMD Family 0x10 processors.
43214       return 3;
43215     }
43216
43217     int main ()
43218     {
43219       int (*p)() = &foo;
43220       assert ((*p) () == foo ());
43221       return 0;
43222     }
43223
43224 In the above example, four versions of function foo are created.  The
43225first version of foo with the target attribute "default" is the default
43226version.  This version gets executed when no other target specific
43227version qualifies for execution on a particular platform.  A new version
43228of foo is created by using the same function signature but with a
43229different target string.  Function foo is called or a pointer to it is
43230taken just like a regular function.  GCC takes care of doing the
43231dispatching to call the right version at runtime.  Refer to the GCC wiki
43232on Function Multiversioning
43233(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
43234
43235
43236File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
43237
432387.9 Namespace Association
43239=========================
43240
43241*Caution:* The semantics of this extension are equivalent to C++ 2011
43242inline namespaces.  Users should use inline namespaces instead as this
43243extension will be removed in future versions of G++.
43244
43245 A using-directive with '__attribute ((strong))' is stronger than a
43246normal using-directive in two ways:
43247
43248   * Templates from the used namespace can be specialized and explicitly
43249     instantiated as though they were members of the using namespace.
43250
43251   * The using namespace is considered an associated namespace of all
43252     templates in the used namespace for purposes of argument-dependent
43253     name lookup.
43254
43255 The used namespace must be nested within the using namespace so that
43256normal unqualified lookup works properly.
43257
43258 This is useful for composing a namespace transparently from
43259implementation namespaces.  For example:
43260
43261     namespace std {
43262       namespace debug {
43263         template <class T> struct A { };
43264       }
43265       using namespace debug __attribute ((__strong__));
43266       template <> struct A<int> { };   // ok to specialize
43267
43268       template <class T> void f (A<T>);
43269     }
43270
43271     int main()
43272     {
43273       f (std::A<float>());             // lookup finds std::f
43274       f (std::A<int>());
43275     }
43276
43277
43278File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
43279
432807.10 Type Traits
43281================
43282
43283The C++ front end implements syntactic extensions that allow
43284compile-time determination of various characteristics of a type (or of a
43285pair of types).
43286
43287'__has_nothrow_assign (type)'
43288     If 'type' is const qualified or is a reference type then the trait
43289     is false.  Otherwise if '__has_trivial_assign (type)' is true then
43290     the trait is true, else if 'type' is a cv class or union type with
43291     copy assignment operators that are known not to throw an exception
43292     then the trait is true, else it is false.  Requires: 'type' shall
43293     be a complete type, (possibly cv-qualified) 'void', or an array of
43294     unknown bound.
43295
43296'__has_nothrow_copy (type)'
43297     If '__has_trivial_copy (type)' is true then the trait is true, else
43298     if 'type' is a cv class or union type with copy constructors that
43299     are known not to throw an exception then the trait is true, else it
43300     is false.  Requires: 'type' shall be a complete type, (possibly
43301     cv-qualified) 'void', or an array of unknown bound.
43302
43303'__has_nothrow_constructor (type)'
43304     If '__has_trivial_constructor (type)' is true then the trait is
43305     true, else if 'type' is a cv class or union type (or array thereof)
43306     with a default constructor that is known not to throw an exception
43307     then the trait is true, else it is false.  Requires: 'type' shall
43308     be a complete type, (possibly cv-qualified) 'void', or an array of
43309     unknown bound.
43310
43311'__has_trivial_assign (type)'
43312     If 'type' is const qualified or is a reference type then the trait
43313     is false.  Otherwise if '__is_pod (type)' is true then the trait is
43314     true, else if 'type' is a cv class or union type with a trivial
43315     copy assignment ([class.copy]) then the trait is true, else it is
43316     false.  Requires: 'type' shall be a complete type, (possibly
43317     cv-qualified) 'void', or an array of unknown bound.
43318
43319'__has_trivial_copy (type)'
43320     If '__is_pod (type)' is true or 'type' is a reference type then the
43321     trait is true, else if 'type' is a cv class or union type with a
43322     trivial copy constructor ([class.copy]) then the trait is true,
43323     else it is false.  Requires: 'type' shall be a complete type,
43324     (possibly cv-qualified) 'void', or an array of unknown bound.
43325
43326'__has_trivial_constructor (type)'
43327     If '__is_pod (type)' is true then the trait is true, else if 'type'
43328     is a cv class or union type (or array thereof) with a trivial
43329     default constructor ([class.ctor]) then the trait is true, else it
43330     is false.  Requires: 'type' shall be a complete type, (possibly
43331     cv-qualified) 'void', or an array of unknown bound.
43332
43333'__has_trivial_destructor (type)'
43334     If '__is_pod (type)' is true or 'type' is a reference type then the
43335     trait is true, else if 'type' is a cv class or union type (or array
43336     thereof) with a trivial destructor ([class.dtor]) then the trait is
43337     true, else it is false.  Requires: 'type' shall be a complete type,
43338     (possibly cv-qualified) 'void', or an array of unknown bound.
43339
43340'__has_virtual_destructor (type)'
43341     If 'type' is a class type with a virtual destructor ([class.dtor])
43342     then the trait is true, else it is false.  Requires: 'type' shall
43343     be a complete type, (possibly cv-qualified) 'void', or an array of
43344     unknown bound.
43345
43346'__is_abstract (type)'
43347     If 'type' is an abstract class ([class.abstract]) then the trait is
43348     true, else it is false.  Requires: 'type' shall be a complete type,
43349     (possibly cv-qualified) 'void', or an array of unknown bound.
43350
43351'__is_base_of (base_type, derived_type)'
43352     If 'base_type' is a base class of 'derived_type' ([class.derived])
43353     then the trait is true, otherwise it is false.  Top-level cv
43354     qualifications of 'base_type' and 'derived_type' are ignored.  For
43355     the purposes of this trait, a class type is considered is own base.
43356     Requires: if '__is_class (base_type)' and '__is_class
43357     (derived_type)' are true and 'base_type' and 'derived_type' are not
43358     the same type (disregarding cv-qualifiers), 'derived_type' shall be
43359     a complete type.  Diagnostic is produced if this requirement is not
43360     met.
43361
43362'__is_class (type)'
43363     If 'type' is a cv class type, and not a union type
43364     ([basic.compound]) the trait is true, else it is false.
43365
43366'__is_empty (type)'
43367     If '__is_class (type)' is false then the trait is false.  Otherwise
43368     'type' is considered empty if and only if: 'type' has no non-static
43369     data members, or all non-static data members, if any, are
43370     bit-fields of length 0, and 'type' has no virtual members, and
43371     'type' has no virtual base classes, and 'type' has no base classes
43372     'base_type' for which '__is_empty (base_type)' is false.  Requires:
43373     'type' shall be a complete type, (possibly cv-qualified) 'void', or
43374     an array of unknown bound.
43375
43376'__is_enum (type)'
43377     If 'type' is a cv enumeration type ([basic.compound]) the trait is
43378     true, else it is false.
43379
43380'__is_literal_type (type)'
43381     If 'type' is a literal type ([basic.types]) the trait is true, else
43382     it is false.  Requires: 'type' shall be a complete type, (possibly
43383     cv-qualified) 'void', or an array of unknown bound.
43384
43385'__is_pod (type)'
43386     If 'type' is a cv POD type ([basic.types]) then the trait is true,
43387     else it is false.  Requires: 'type' shall be a complete type,
43388     (possibly cv-qualified) 'void', or an array of unknown bound.
43389
43390'__is_polymorphic (type)'
43391     If 'type' is a polymorphic class ([class.virtual]) then the trait
43392     is true, else it is false.  Requires: 'type' shall be a complete
43393     type, (possibly cv-qualified) 'void', or an array of unknown bound.
43394
43395'__is_standard_layout (type)'
43396     If 'type' is a standard-layout type ([basic.types]) the trait is
43397     true, else it is false.  Requires: 'type' shall be a complete type,
43398     (possibly cv-qualified) 'void', or an array of unknown bound.
43399
43400'__is_trivial (type)'
43401     If 'type' is a trivial type ([basic.types]) the trait is true, else
43402     it is false.  Requires: 'type' shall be a complete type, (possibly
43403     cv-qualified) 'void', or an array of unknown bound.
43404
43405'__is_union (type)'
43406     If 'type' is a cv union type ([basic.compound]) the trait is true,
43407     else it is false.
43408
43409'__underlying_type (type)'
43410     The underlying type of 'type'.  Requires: 'type' shall be an
43411     enumeration type ([dcl.enum]).
43412
43413
43414File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
43415
434167.11 Java Exceptions
43417====================
43418
43419The Java language uses a slightly different exception handling model
43420from C++.  Normally, GNU C++ automatically detects when you are writing
43421C++ code that uses Java exceptions, and handle them appropriately.
43422However, if C++ code only needs to execute destructors when Java
43423exceptions are thrown through it, GCC guesses incorrectly.  Sample
43424problematic code is:
43425
43426       struct S { ~S(); };
43427       extern void bar();    // is written in Java, and may throw exceptions
43428       void foo()
43429       {
43430         S s;
43431         bar();
43432       }
43433
43434The usual effect of an incorrect guess is a link failure, complaining of
43435a missing routine called '__gxx_personality_v0'.
43436
43437 You can inform the compiler that Java exceptions are to be used in a
43438translation unit, irrespective of what it might think, by writing
43439'#pragma GCC java_exceptions' at the head of the file.  This '#pragma'
43440must appear before any functions that throw or catch exceptions, or run
43441destructors when exceptions are thrown through them.
43442
43443 You cannot mix Java and C++ exceptions in the same translation unit.
43444It is believed to be safe to throw a C++ exception from one file through
43445another file compiled for the Java exception model, or vice versa, but
43446there may be bugs in this area.
43447
43448
43449File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
43450
434517.12 Deprecated Features
43452========================
43453
43454In the past, the GNU C++ compiler was extended to experiment with new
43455features, at a time when the C++ language was still evolving.  Now that
43456the C++ standard is complete, some of those features are superseded by
43457superior alternatives.  Using the old features might cause a warning in
43458some cases that the feature will be dropped in the future.  In other
43459cases, the feature might be gone already.
43460
43461 While the list below is not exhaustive, it documents some of the
43462options that are now deprecated:
43463
43464'-fexternal-templates'
43465'-falt-external-templates'
43466     These are two of the many ways for G++ to implement template
43467     instantiation.  *Note Template Instantiation::.  The C++ standard
43468     clearly defines how template definitions have to be organized
43469     across implementation units.  G++ has an implicit instantiation
43470     mechanism that should work just fine for standard-conforming code.
43471
43472'-fstrict-prototype'
43473'-fno-strict-prototype'
43474     Previously it was possible to use an empty prototype parameter list
43475     to indicate an unspecified number of parameters (like C), rather
43476     than no parameters, as C++ demands.  This feature has been removed,
43477     except where it is required for backwards compatibility.  *Note
43478     Backwards Compatibility::.
43479
43480 G++ allows a virtual function returning 'void *' to be overridden by
43481one returning a different pointer type.  This extension to the covariant
43482return type rules is now deprecated and will be removed from a future
43483version.
43484
43485 The G++ minimum and maximum operators ('<?' and '>?') and their
43486compound forms ('<?=') and '>?=') have been deprecated and are now
43487removed from G++.  Code using these operators should be modified to use
43488'std::min' and 'std::max' instead.
43489
43490 The named return value extension has been deprecated, and is now
43491removed from G++.
43492
43493 The use of initializer lists with new expressions has been deprecated,
43494and is now removed from G++.
43495
43496 Floating and complex non-type template parameters have been deprecated,
43497and are now removed from G++.
43498
43499 The implicit typename extension has been deprecated and is now removed
43500from G++.
43501
43502 The use of default arguments in function pointers, function typedefs
43503and other places where they are not permitted by the standard is
43504deprecated and will be removed from a future version of G++.
43505
43506 G++ allows floating-point literals to appear in integral constant
43507expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
43508deprecated and will be removed from a future version.
43509
43510 G++ allows static data members of const floating-point type to be
43511declared with an initializer in a class definition.  The standard only
43512allows initializers for static members of const integral types and const
43513enumeration types so this extension has been deprecated and will be
43514removed from a future version.
43515
43516
43517File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
43518
435197.13 Backwards Compatibility
43520============================
43521
43522Now that there is a definitive ISO standard C++, G++ has a specification
43523to adhere to.  The C++ language evolved over time, and features that
43524used to be acceptable in previous drafts of the standard, such as the
43525ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
43526to allow compilation of C++ written to such drafts, G++ contains some
43527backwards compatibilities.  _All such backwards compatibility features
43528are liable to disappear in future versions of G++._  They should be
43529considered deprecated.  *Note Deprecated Features::.
43530
43531'For scope'
43532     If a variable is declared at for scope, it used to remain in scope
43533     until the end of the scope that contained the for statement (rather
43534     than just within the for scope).  G++ retains this, but issues a
43535     warning, if such a variable is accessed outside the for scope.
43536
43537'Implicit C language'
43538     Old C system header files did not contain an 'extern "C" {...}'
43539     scope to set the language.  On such systems, all header files are
43540     implicitly scoped inside a C language scope.  Also, an empty
43541     prototype '()' is treated as an unspecified number of arguments,
43542     rather than no arguments, as C++ demands.
43543
43544
43545File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
43546
435478 GNU Objective-C features
43548**************************
43549
43550This document is meant to describe some of the GNU Objective-C features.
43551It is not intended to teach you Objective-C. There are several resources
43552on the Internet that present the language.
43553
43554* Menu:
43555
43556* GNU Objective-C runtime API::
43557* Executing code before main::
43558* Type encoding::
43559* Garbage Collection::
43560* Constant string objects::
43561* compatibility_alias::
43562* Exceptions::
43563* Synchronization::
43564* Fast enumeration::
43565* Messaging with the GNU Objective-C runtime::
43566
43567
43568File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
43569
435708.1 GNU Objective-C runtime API
43571===============================
43572
43573This section is specific for the GNU Objective-C runtime.  If you are
43574using a different runtime, you can skip it.
43575
43576 The GNU Objective-C runtime provides an API that allows you to interact
43577with the Objective-C runtime system, querying the live runtime
43578structures and even manipulating them.  This allows you for example to
43579inspect and navigate classes, methods and protocols; to define new
43580classes or new methods, and even to modify existing classes or
43581protocols.
43582
43583 If you are using a "Foundation" library such as GNUstep-Base, this
43584library will provide you with a rich set of functionality to do most of
43585the inspection tasks, and you probably will only need direct access to
43586the GNU Objective-C runtime API to define new classes or methods.
43587
43588* Menu:
43589
43590* Modern GNU Objective-C runtime API::
43591* Traditional GNU Objective-C runtime API::
43592
43593
43594File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
43595
435968.1.1 Modern GNU Objective-C runtime API
43597----------------------------------------
43598
43599The GNU Objective-C runtime provides an API which is similar to the one
43600provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
43601API is documented in the public header files of the GNU Objective-C
43602runtime:
43603
43604   * 'objc/objc.h': this is the basic Objective-C header file, defining
43605     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
43606     have to include this header to do almost anything with Objective-C.
43607
43608   * 'objc/runtime.h': this header declares most of the public runtime
43609     API functions allowing you to inspect and manipulate the
43610     Objective-C runtime data structures.  These functions are fairly
43611     standardized across Objective-C runtimes and are almost identical
43612     to the Apple/NeXT Objective-C runtime ones.  It does not declare
43613     functions in some specialized areas (constructing and forwarding
43614     message invocations, threading) which are in the other headers
43615     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
43616     use any of the functions, such as 'class_getName()', declared in
43617     'objc/runtime.h'.
43618
43619   * 'objc/message.h': this header declares public functions used to
43620     construct, deconstruct and forward message invocations.  Because
43621     messaging is done in quite a different way on different runtimes,
43622     functions in this header are specific to the GNU Objective-C
43623     runtime implementation.
43624
43625   * 'objc/objc-exception.h': this header declares some public functions
43626     related to Objective-C exceptions.  For example functions in this
43627     header allow you to throw an Objective-C exception from plain C/C++
43628     code.
43629
43630   * 'objc/objc-sync.h': this header declares some public functions
43631     related to the Objective-C '@synchronized()' syntax, allowing you
43632     to emulate an Objective-C '@synchronized()' block in plain C/C++
43633     code.
43634
43635   * 'objc/thr.h': this header declares a public runtime API threading
43636     layer that is only provided by the GNU Objective-C runtime.  It
43637     declares functions such as 'objc_mutex_lock()', which provide a
43638     platform-independent set of threading functions.
43639
43640 The header files contain detailed documentation for each function in
43641the GNU Objective-C runtime API.
43642
43643
43644File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
43645
436468.1.2 Traditional GNU Objective-C runtime API
43647---------------------------------------------
43648
43649The GNU Objective-C runtime used to provide a different API, which we
43650call the "traditional" GNU Objective-C runtime API. Functions belonging
43651to this API are easy to recognize because they use a different naming
43652convention, such as 'class_get_super_class()' (traditional API) instead
43653of 'class_getSuperclass()' (modern API). Software using this API
43654includes the file 'objc/objc-api.h' where it is declared.
43655
43656 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
43657available.
43658
43659
43660File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
43661
436628.2 '+load': Executing code before main
43663=======================================
43664
43665This section is specific for the GNU Objective-C runtime.  If you are
43666using a different runtime, you can skip it.
43667
43668 The GNU Objective-C runtime provides a way that allows you to execute
43669code before the execution of the program enters the 'main' function.
43670The code is executed on a per-class and a per-category basis, through a
43671special class method '+load'.
43672
43673 This facility is very useful if you want to initialize global variables
43674which can be accessed by the program directly, without sending a message
43675to the class first.  The usual way to initialize global variables, in
43676the '+initialize' method, might not be useful because '+initialize' is
43677only called when the first message is sent to a class object, which in
43678some cases could be too late.
43679
43680 Suppose for example you have a 'FileStream' class that declares
43681'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
43682
43683
43684     FileStream *Stdin = nil;
43685     FileStream *Stdout = nil;
43686     FileStream *Stderr = nil;
43687
43688     @implementation FileStream
43689
43690     + (void)initialize
43691     {
43692         Stdin = [[FileStream new] initWithFd:0];
43693         Stdout = [[FileStream new] initWithFd:1];
43694         Stderr = [[FileStream new] initWithFd:2];
43695     }
43696
43697     /* Other methods here */
43698     @end
43699
43700
43701 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
43702in '+initialize' occurs too late.  The programmer can send a message to
43703one of these objects before the variables are actually initialized, thus
43704sending messages to the 'nil' object.  The '+initialize' method which
43705actually initializes the global variables is not invoked until the first
43706message is sent to the class object.  The solution would require these
43707variables to be initialized just before entering 'main'.
43708
43709 The correct solution of the above problem is to use the '+load' method
43710instead of '+initialize':
43711
43712
43713     @implementation FileStream
43714
43715     + (void)load
43716     {
43717         Stdin = [[FileStream new] initWithFd:0];
43718         Stdout = [[FileStream new] initWithFd:1];
43719         Stderr = [[FileStream new] initWithFd:2];
43720     }
43721
43722     /* Other methods here */
43723     @end
43724
43725
43726 The '+load' is a method that is not overridden by categories.  If a
43727class and a category of it both implement '+load', both methods are
43728invoked.  This allows some additional initializations to be performed in
43729a category.
43730
43731 This mechanism is not intended to be a replacement for '+initialize'.
43732You should be aware of its limitations when you decide to use it instead
43733of '+initialize'.
43734
43735* Menu:
43736
43737* What you can and what you cannot do in +load::
43738
43739
43740File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
43741
437428.2.1 What you can and what you cannot do in '+load'
43743----------------------------------------------------
43744
43745'+load' is to be used only as a last resort.  Because it is executed
43746very early, most of the Objective-C runtime machinery will not be ready
43747when '+load' is executed; hence '+load' works best for executing C code
43748that is independent on the Objective-C runtime.
43749
43750 The '+load' implementation in the GNU runtime guarantees you the
43751following things:
43752
43753   * you can write whatever C code you like;
43754
43755   * you can allocate and send messages to objects whose class is
43756     implemented in the same file;
43757
43758   * the '+load' implementation of all super classes of a class are
43759     executed before the '+load' of that class is executed;
43760
43761   * the '+load' implementation of a class is executed before the
43762     '+load' implementation of any category.
43763
43764 In particular, the following things, even if they can work in a
43765particular case, are not guaranteed:
43766
43767   * allocation of or sending messages to arbitrary objects;
43768
43769   * allocation of or sending messages to objects whose classes have a
43770     category implemented in the same file;
43771
43772   * sending messages to Objective-C constant strings ('@"this is a
43773     constant string"');
43774
43775 You should make no assumptions about receiving '+load' in sibling
43776classes when you write '+load' of a class.  The order in which sibling
43777classes receive '+load' is not guaranteed.
43778
43779 The order in which '+load' and '+initialize' are called could be
43780problematic if this matters.  If you don't allocate objects inside
43781'+load', it is guaranteed that '+load' is called before '+initialize'.
43782If you create an object inside '+load' the '+initialize' method of
43783object's class is invoked even if '+load' was not invoked.  Note if you
43784explicitly call '+load' on a class, '+initialize' will be called first.
43785To avoid possible problems try to implement only one of these methods.
43786
43787 The '+load' method is also invoked when a bundle is dynamically loaded
43788into your running program.  This happens automatically without any
43789intervening operation from you.  When you write bundles and you need to
43790write '+load' you can safely create and send messages to objects whose
43791classes already exist in the running program.  The same restrictions as
43792above apply to classes defined in bundle.
43793
43794
43795File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
43796
437978.3 Type encoding
43798=================
43799
43800This is an advanced section.  Type encodings are used extensively by the
43801compiler and by the runtime, but you generally do not need to know about
43802them to use Objective-C.
43803
43804 The Objective-C compiler generates type encodings for all the types.
43805These type encodings are used at runtime to find out information about
43806selectors and methods and about objects and classes.
43807
43808 The types are encoded in the following way:
43809
43810'_Bool'            'B'
43811'char'             'c'
43812'unsigned char'    'C'
43813'short'            's'
43814'unsigned short'   'S'
43815'int'              'i'
43816'unsigned int'     'I'
43817'long'             'l'
43818'unsigned long'    'L'
43819'long long'        'q'
43820'unsigned long     'Q'
43821long'
43822'float'            'f'
43823'double'           'd'
43824'long double'      'D'
43825'void'             'v'
43826'id'               '@'
43827'Class'            '#'
43828'SEL'              ':'
43829'char*'            '*'
43830'enum'             an 'enum' is encoded exactly as the integer type
43831                   that the compiler uses for it, which depends on the
43832                   enumeration values.  Often the compiler users
43833                   'unsigned int', which is then encoded as 'I'.
43834unknown type       '?'
43835Complex types      'j' followed by the inner type.  For example
43836                   '_Complex double' is encoded as "jd".
43837bit-fields         'b' followed by the starting position of the
43838                   bit-field, the type of the bit-field and the size of
43839                   the bit-field (the bit-fields encoding was changed
43840                   from the NeXT's compiler encoding, see below)
43841
43842 The encoding of bit-fields has changed to allow bit-fields to be
43843properly handled by the runtime functions that compute sizes and
43844alignments of types that contain bit-fields.  The previous encoding
43845contained only the size of the bit-field.  Using only this information
43846it is not possible to reliably compute the size occupied by the
43847bit-field.  This is very important in the presence of the Boehm's
43848garbage collector because the objects are allocated using the typed
43849memory facility available in this collector.  The typed memory
43850allocation requires information about where the pointers are located
43851inside the object.
43852
43853 The position in the bit-field is the position, counting in bits, of the
43854bit closest to the beginning of the structure.
43855
43856 The non-atomic types are encoded as follows:
43857
43858pointers       '^' followed by the pointed type.
43859arrays         '[' followed by the number of elements in the array
43860               followed by the type of the elements followed by ']'
43861structures     '{' followed by the name of the structure (or '?' if the
43862               structure is unnamed), the '=' sign, the type of the
43863               members and by '}'
43864unions         '(' followed by the name of the structure (or '?' if the
43865               union is unnamed), the '=' sign, the type of the members
43866               followed by ')'
43867vectors        '![' followed by the vector_size (the number of bytes
43868               composing the vector) followed by a comma, followed by
43869               the alignment (in bytes) of the vector, followed by the
43870               type of the elements followed by ']'
43871
43872 Here are some types and their encodings, as they are generated by the
43873compiler on an i386 machine:
43874
43875
43876Objective-C type   Compiler encoding
43877     int a[10];    '[10i]'
43878     struct {      '{?=i[3f]b128i3b131i2c}'
43879       int i;
43880       float f[3];
43881       int a:3;
43882       int b:2;
43883       char c;
43884     }
43885     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine)
43886
43887
43888 In addition to the types the compiler also encodes the type specifiers.
43889The table below describes the encoding of the current Objective-C type
43890specifiers:
43891
43892
43893Specifier          Encoding
43894'const'            'r'
43895'in'               'n'
43896'inout'            'N'
43897'out'              'o'
43898'bycopy'           'O'
43899'byref'            'R'
43900'oneway'           'V'
43901
43902
43903 The type specifiers are encoded just before the type.  Unlike types
43904however, the type specifiers are only encoded when they appear in method
43905argument types.
43906
43907 Note how 'const' interacts with pointers:
43908
43909
43910Objective-C type   Compiler encoding
43911     const int     'ri'
43912     const int*    '^ri'
43913     int *const    'r^i'
43914
43915
43916 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
43917'int* const', instead, is a 'const' pointer to an 'int', and so is
43918encoded as 'r^i'.
43919
43920 Finally, there is a complication when encoding 'const char *' versus
43921'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
43922there is no way to express the fact that 'r' applies to the pointer or
43923to the pointee.
43924
43925 Hence, it is assumed as a convention that 'r*' means 'const char *'
43926(since it is what is most often meant), and there is no way to encode
43927'char *const'.  'char *const' would simply be encoded as '*', and the
43928'const' is lost.
43929
43930* Menu:
43931
43932* Legacy type encoding::
43933* @encode::
43934* Method signatures::
43935
43936
43937File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
43938
439398.3.1 Legacy type encoding
43940--------------------------
43941
43942Unfortunately, historically GCC used to have a number of bugs in its
43943encoding code.  The NeXT runtime expects GCC to emit type encodings in
43944this historical format (compatible with GCC-3.3), so when using the NeXT
43945runtime, GCC will introduce on purpose a number of incorrect encodings:
43946
43947   * the read-only qualifier of the pointee gets emitted before the '^'.
43948     The read-only qualifier of the pointer itself gets ignored, unless
43949     it is a typedef.  Also, the 'r' is only emitted for the outermost
43950     type.
43951
43952   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
43953     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
43954     field or a pointer.
43955
43956   * 'enum's are always encoded as 'i' (int) even if they are actually
43957     unsigned or long.
43958
43959 In addition to that, the NeXT runtime uses a different encoding for
43960bitfields.  It encodes them as 'b' followed by the size, without a bit
43961offset or the underlying field type.
43962
43963
43964File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
43965
439668.3.2 @encode
43967-------------
43968
43969GNU Objective-C supports the '@encode' syntax that allows you to create
43970a type encoding from a C/Objective-C type.  For example, '@encode(int)'
43971is compiled by the compiler into '"i"'.
43972
43973 '@encode' does not support type qualifiers other than 'const'.  For
43974example, '@encode(const char*)' is valid and is compiled into '"r*"',
43975while '@encode(bycopy char *)' is invalid and will cause a compilation
43976error.
43977
43978
43979File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
43980
439818.3.3 Method signatures
43982-----------------------
43983
43984This section documents the encoding of method types, which is rarely
43985needed to use Objective-C. You should skip it at a first reading; the
43986runtime provides functions that will work on methods and can walk
43987through the list of parameters and interpret them for you.  These
43988functions are part of the public "API" and are the preferred way to
43989interact with method signatures from user code.
43990
43991 But if you need to debug a problem with method signatures and need to
43992know how they are implemented (i.e., the "ABI"), read on.
43993
43994 Methods have their "signature" encoded and made available to the
43995runtime.  The "signature" encodes all the information required to
43996dynamically build invocations of the method at runtime: return type and
43997arguments.
43998
43999 The "signature" is a null-terminated string, composed of the following:
44000
44001   * The return type, including type qualifiers.  For example, a method
44002     returning 'int' would have 'i' here.
44003
44004   * The total size (in bytes) required to pass all the parameters.
44005     This includes the two hidden parameters (the object 'self' and the
44006     method selector '_cmd').
44007
44008   * Each argument, with the type encoding, followed by the offset (in
44009     bytes) of the argument in the list of parameters.
44010
44011 For example, a method with no arguments and returning 'int' would have
44012the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
44013interpreted as follows: the 'i' is the return type (an 'int'), the '8'
44014is the total size of the parameters in bytes (two pointers each of size
440154), the '@0' is the first parameter (an object at byte offset '0') and
44016':4' is the second parameter (a 'SEL' at byte offset '4').
44017
44018 You can easily find more examples by running the "strings" program on
44019an Objective-C object file compiled by GCC. You'll see a lot of strings
44020that look very much like 'i8@0:4'.  They are signatures of Objective-C
44021methods.
44022
44023
44024File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
44025
440268.4 Garbage Collection
44027======================
44028
44029This section is specific for the GNU Objective-C runtime.  If you are
44030using a different runtime, you can skip it.
44031
44032 Support for garbage collection with the GNU runtime has been added by
44033using a powerful conservative garbage collector, known as the
44034Boehm-Demers-Weiser conservative garbage collector.
44035
44036 To enable the support for it you have to configure the compiler using
44037an additional argument, '--enable-objc-gc'.  This will build the
44038boehm-gc library, and build an additional runtime library which has
44039several enhancements to support the garbage collector.  The new library
44040has a new name, 'libobjc_gc.a' to not conflict with the
44041non-garbage-collected library.
44042
44043 When the garbage collector is used, the objects are allocated using the
44044so-called typed memory allocation mechanism available in the
44045Boehm-Demers-Weiser collector.  This mode requires precise information
44046on where pointers are located inside objects.  This information is
44047computed once per class, immediately after the class has been
44048initialized.
44049
44050 There is a new runtime function 'class_ivar_set_gcinvisible()' which
44051can be used to declare a so-called "weak pointer" reference.  Such a
44052pointer is basically hidden for the garbage collector; this can be
44053useful in certain situations, especially when you want to keep track of
44054the allocated objects, yet allow them to be collected.  This kind of
44055pointers can only be members of objects, you cannot declare a global
44056pointer as a weak reference.  Every type which is a pointer type can be
44057declared a weak pointer, including 'id', 'Class' and 'SEL'.
44058
44059 Here is an example of how to use this feature.  Suppose you want to
44060implement a class whose instances hold a weak pointer reference; the
44061following class does this:
44062
44063
44064     @interface WeakPointer : Object
44065     {
44066         const void* weakPointer;
44067     }
44068
44069     - initWithPointer:(const void*)p;
44070     - (const void*)weakPointer;
44071     @end
44072
44073
44074     @implementation WeakPointer
44075
44076     + (void)initialize
44077     {
44078       if (self == objc_lookUpClass ("WeakPointer"))
44079         class_ivar_set_gcinvisible (self, "weakPointer", YES);
44080     }
44081
44082     - initWithPointer:(const void*)p
44083     {
44084       weakPointer = p;
44085       return self;
44086     }
44087
44088     - (const void*)weakPointer
44089     {
44090       return weakPointer;
44091     }
44092
44093     @end
44094
44095
44096 Weak pointers are supported through a new type character specifier
44097represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
44098function adds or removes this specifier to the string type description
44099of the instance variable named as argument.
44100
44101
44102File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
44103
441048.5 Constant string objects
44105===========================
44106
44107GNU Objective-C provides constant string objects that are generated
44108directly by the compiler.  You declare a constant string object by
44109prefixing a C constant string with the character '@':
44110
44111       id myString = @"this is a constant string object";
44112
44113 The constant string objects are by default instances of the
44114'NXConstantString' class which is provided by the GNU Objective-C
44115runtime.  To get the definition of this class you must include the
44116'objc/NXConstStr.h' header file.
44117
44118 User defined libraries may want to implement their own constant string
44119class.  To be able to support them, the GNU Objective-C compiler
44120provides a new command line options
44121'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
44122to a strict structure, the same as 'NXConstantString''s structure:
44123
44124
44125     @interface MyConstantStringClass
44126     {
44127       Class isa;
44128       char *c_string;
44129       unsigned int len;
44130     }
44131     @end
44132
44133
44134 'NXConstantString' inherits from 'Object'; user class libraries may
44135choose to inherit the customized constant string class from a different
44136class than 'Object'.  There is no requirement in the methods the
44137constant string class has to implement, but the final ivar layout of the
44138class must be the compatible with the given structure.
44139
44140 When the compiler creates the statically allocated constant string
44141object, the 'c_string' field will be filled by the compiler with the
44142string; the 'length' field will be filled by the compiler with the
44143string length; the 'isa' pointer will be filled with 'NULL' by the
44144compiler, and it will later be fixed up automatically at runtime by the
44145GNU Objective-C runtime library to point to the class which was set by
44146the '-fconstant-string-class' option when the object file is loaded (if
44147you wonder how it works behind the scenes, the name of the class to use,
44148and the list of static objects to fixup, are stored by the compiler in
44149the object file in a place where the GNU runtime library will find them
44150at runtime).
44151
44152 As a result, when a file is compiled with the '-fconstant-string-class'
44153option, all the constant string objects will be instances of the class
44154specified as argument to this option.  It is possible to have multiple
44155compilation units referring to different constant string classes,
44156neither the compiler nor the linker impose any restrictions in doing
44157this.
44158
44159
44160File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
44161
441628.6 compatibility_alias
44163=======================
44164
44165The keyword '@compatibility_alias' allows you to define a class name as
44166equivalent to another class name.  For example:
44167
44168     @compatibility_alias WOApplication GSWApplication;
44169
44170 tells the compiler that each time it encounters 'WOApplication' as a
44171class name, it should replace it with 'GSWApplication' (that is,
44172'WOApplication' is just an alias for 'GSWApplication').
44173
44174 There are some constraints on how this can be used--
44175
44176   * 'WOApplication' (the alias) must not be an existing class;
44177
44178   * 'GSWApplication' (the real class) must be an existing class.
44179
44180
44181File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
44182
441838.7 Exceptions
44184==============
44185
44186GNU Objective-C provides exception support built into the language, as
44187in the following example:
44188
44189       @try {
44190         ...
44191            @throw expr;
44192         ...
44193       }
44194       @catch (AnObjCClass *exc) {
44195         ...
44196           @throw expr;
44197         ...
44198           @throw;
44199         ...
44200       }
44201       @catch (AnotherClass *exc) {
44202         ...
44203       }
44204       @catch (id allOthers) {
44205         ...
44206       }
44207       @finally {
44208         ...
44209           @throw expr;
44210         ...
44211       }
44212
44213 The '@throw' statement may appear anywhere in an Objective-C or
44214Objective-C++ program; when used inside of a '@catch' block, the
44215'@throw' may appear without an argument (as shown above), in which case
44216the object caught by the '@catch' will be rethrown.
44217
44218 Note that only (pointers to) Objective-C objects may be thrown and
44219caught using this scheme.  When an object is thrown, it will be caught
44220by the nearest '@catch' clause capable of handling objects of that type,
44221analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
44222...)' clause (as shown above) may also be provided to catch any and all
44223Objective-C exceptions not caught by previous '@catch' clauses (if any).
44224
44225 The '@finally' clause, if present, will be executed upon exit from the
44226immediately preceding '@try ... @catch' section.  This will happen
44227regardless of whether any exceptions are thrown, caught or rethrown
44228inside the '@try ... @catch' section, analogously to the behavior of the
44229'finally' clause in Java.
44230
44231 There are several caveats to using the new exception mechanism:
44232
44233   * The '-fobjc-exceptions' command line option must be used when
44234     compiling Objective-C files that use exceptions.
44235
44236   * With the GNU runtime, exceptions are always implemented as "native"
44237     exceptions and it is recommended that the '-fexceptions' and
44238     '-shared-libgcc' options are used when linking.
44239
44240   * With the NeXT runtime, although currently designed to be binary
44241     compatible with 'NS_HANDLER'-style idioms provided by the
44242     'NSException' class, the new exceptions can only be used on Mac OS
44243     X 10.3 (Panther) and later systems, due to additional functionality
44244     needed in the NeXT Objective-C runtime.
44245
44246   * As mentioned above, the new exceptions do not support handling
44247     types other than Objective-C objects.  Furthermore, when used from
44248     Objective-C++, the Objective-C exception model does not
44249     interoperate with C++ exceptions at this time.  This means you
44250     cannot '@throw' an exception from Objective-C and 'catch' it in
44251     C++, or vice versa (i.e., 'throw ... @catch').
44252
44253
44254File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
44255
442568.8 Synchronization
44257===================
44258
44259GNU Objective-C provides support for synchronized blocks:
44260
44261       @synchronized (ObjCClass *guard) {
44262         ...
44263       }
44264
44265 Upon entering the '@synchronized' block, a thread of execution shall
44266first check whether a lock has been placed on the corresponding 'guard'
44267object by another thread.  If it has, the current thread shall wait
44268until the other thread relinquishes its lock.  Once 'guard' becomes
44269available, the current thread will place its own lock on it, execute the
44270code contained in the '@synchronized' block, and finally relinquish the
44271lock (thereby making 'guard' available to other threads).
44272
44273 Unlike Java, Objective-C does not allow for entire methods to be marked
44274'@synchronized'.  Note that throwing exceptions out of '@synchronized'
44275blocks is allowed, and will cause the guarding object to be unlocked
44276properly.
44277
44278 Because of the interactions between synchronization and exception
44279handling, you can only use '@synchronized' when compiling with
44280exceptions enabled, that is with the command line option
44281'-fobjc-exceptions'.
44282
44283
44284File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
44285
442868.9 Fast enumeration
44287====================
44288
44289* Menu:
44290
44291* Using fast enumeration::
44292* c99-like fast enumeration syntax::
44293* Fast enumeration details::
44294* Fast enumeration protocol::
44295
44296
44297File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
44298
442998.9.1 Using fast enumeration
44300----------------------------
44301
44302GNU Objective-C provides support for the fast enumeration syntax:
44303
44304       id array = ...;
44305       id object;
44306
44307       for (object in array)
44308       {
44309         /* Do something with 'object' */
44310       }
44311
44312 'array' needs to be an Objective-C object (usually a collection object,
44313for example an array, a dictionary or a set) which implements the "Fast
44314Enumeration Protocol" (see below).  If you are using a Foundation
44315library such as GNUstep Base or Apple Cocoa Foundation, all collection
44316objects in the library implement this protocol and can be used in this
44317way.
44318
44319 The code above would iterate over all objects in 'array'.  For each of
44320them, it assigns it to 'object', then executes the 'Do something with
44321'object'' statements.
44322
44323 Here is a fully worked-out example using a Foundation library (which
44324provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
44325
44326       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
44327       NSString *object;
44328
44329       for (object in array)
44330         NSLog (@"Iterating over %@", object);
44331
44332
44333File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
44334
443358.9.2 c99-like fast enumeration syntax
44336--------------------------------------
44337
44338A c99-like declaration syntax is also allowed:
44339
44340       id array = ...;
44341
44342       for (id object in array)
44343       {
44344         /* Do something with 'object'  */
44345       }
44346
44347 this is completely equivalent to:
44348
44349       id array = ...;
44350
44351       {
44352         id object;
44353         for (object in array)
44354         {
44355           /* Do something with 'object'  */
44356         }
44357       }
44358
44359 but can save some typing.
44360
44361 Note that the option '-std=c99' is not required to allow this syntax in
44362Objective-C.
44363
44364
44365File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
44366
443678.9.3 Fast enumeration details
44368------------------------------
44369
44370Here is a more technical description with the gory details.  Consider
44371the code
44372
44373       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
44374       {
44375         STATEMENTS
44376       }
44377
44378 here is what happens when you run it:
44379
44380   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
44381     used as the collection object to iterate over.  This means it is
44382     safe to write code such as 'for (object in [NSDictionary
44383     keyEnumerator]) ...'.
44384
44385   * the iteration is implemented by the compiler by repeatedly getting
44386     batches of objects from the collection object using the fast
44387     enumeration protocol (see below), then iterating over all objects
44388     in the batch.  This is faster than a normal enumeration where
44389     objects are retrieved one by one (hence the name "fast
44390     enumeration").
44391
44392   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
44393     is set to 'nil' and the loop immediately terminates.
44394
44395   * if there are objects in the collection, then for each object in the
44396     collection (in the order they are returned) 'OBJECT EXPRESSION' is
44397     set to the object, then 'STATEMENTS' are executed.
44398
44399   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
44400     will abort the iteration or skip to the next loop iteration as
44401     expected.
44402
44403   * when the iteration ends because there are no more objects to
44404     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
44405     to determine whether the iteration finished because a 'break'
44406     command was used (in which case 'OBJECT EXPRESSION' will remain set
44407     to the last object that was iterated over) or because it iterated
44408     over all the objects (in which case 'OBJECT EXPRESSION' will be set
44409     to 'nil').
44410
44411   * 'STATEMENTS' must not make any changes to the collection object; if
44412     they do, it is a hard error and the fast enumeration terminates by
44413     invoking 'objc_enumerationMutation', a runtime function that
44414     normally aborts the program but which can be customized by
44415     Foundation libraries via 'objc_set_mutation_handler' to do
44416     something different, such as raising an exception.
44417
44418
44419File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
44420
444218.9.4 Fast enumeration protocol
44422-------------------------------
44423
44424If you want your own collection object to be usable with fast
44425enumeration, you need to have it implement the method
44426
44427     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
44428                                           objects: (id *)objects
44429                                             count: (unsigned long)len;
44430
44431 where 'NSFastEnumerationState' must be defined in your code as follows:
44432
44433     typedef struct
44434     {
44435       unsigned long state;
44436       id            *itemsPtr;
44437       unsigned long *mutationsPtr;
44438       unsigned long extra[5];
44439     } NSFastEnumerationState;
44440
44441 If no 'NSFastEnumerationState' is defined in your code, the compiler
44442will automatically replace 'NSFastEnumerationState *' with 'struct
44443__objcFastEnumerationState *', where that type is silently defined by
44444the compiler in an identical way.  This can be confusing and we
44445recommend that you define 'NSFastEnumerationState' (as shown above)
44446instead.
44447
44448 The method is called repeatedly during a fast enumeration to retrieve
44449batches of objects.  Each invocation of the method should retrieve the
44450next batch of objects.
44451
44452 The return value of the method is the number of objects in the current
44453batch; this should not exceed 'len', which is the maximum size of a
44454batch as requested by the caller.  The batch itself is returned in the
44455'itemsPtr' field of the 'NSFastEnumerationState' struct.
44456
44457 To help with returning the objects, the 'objects' array is a C array
44458preallocated by the caller (on the stack) of size 'len'.  In many cases
44459you can put the objects you want to return in that 'objects' array, then
44460do 'itemsPtr = objects'.  But you don't have to; if your collection
44461already has the objects to return in some form of C array, it could
44462return them from there instead.
44463
44464 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
44465structure allows your collection object to keep track of the state of
44466the enumeration.  In a simple array implementation, 'state' may keep
44467track of the index of the last object that was returned, and 'extra' may
44468be unused.
44469
44470 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
44471keep track of mutations.  It should point to a number; before working on
44472each object, the fast enumeration loop will check that this number has
44473not changed.  If it has, a mutation has happened and the fast
44474enumeration will abort.  So, 'mutationsPtr' could be set to point to
44475some sort of version number of your collection, which is increased by
44476one every time there is a change (for example when an object is added or
44477removed).  Or, if you are content with less strict mutation checks, it
44478could point to the number of objects in your collection or some other
44479value that can be checked to perform an approximate check that the
44480collection has not been mutated.
44481
44482 Finally, note how we declared the 'len' argument and the return value
44483to be of type 'unsigned long'.  They could also be declared to be of
44484type 'unsigned int' and everything would still work.
44485
44486
44487File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
44488
444898.10 Messaging with the GNU Objective-C runtime
44490===============================================
44491
44492This section is specific for the GNU Objective-C runtime.  If you are
44493using a different runtime, you can skip it.
44494
44495 The implementation of messaging in the GNU Objective-C runtime is
44496designed to be portable, and so is based on standard C.
44497
44498 Sending a message in the GNU Objective-C runtime is composed of two
44499separate steps.  First, there is a call to the lookup function,
44500'objc_msg_lookup ()' (or, in the case of messages to super,
44501'objc_msg_lookup_super ()').  This runtime function takes as argument
44502the receiver and the selector of the method to be called; it returns the
44503'IMP', that is a pointer to the function implementing the method.  The
44504second step of method invocation consists of casting this pointer
44505function to the appropriate function pointer type, and calling the
44506function pointed to it with the right arguments.
44507
44508 For example, when the compiler encounters a method invocation such as
44509'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
44510@selector(init))' followed by a cast of the returned value to the
44511appropriate function pointer type, and then it calls it.
44512
44513* Menu:
44514
44515* Dynamically registering methods::
44516* Forwarding hook::
44517
44518
44519File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
44520
445218.10.1 Dynamically registering methods
44522--------------------------------------
44523
44524If 'objc_msg_lookup()' does not find a suitable method implementation,
44525because the receiver does not implement the required method, it tries to
44526see if the class can dynamically register the method.
44527
44528 To do so, the runtime checks if the class of the receiver implements
44529the method
44530
44531     + (BOOL) resolveInstanceMethod: (SEL)selector;
44532
44533 in the case of an instance method, or
44534
44535     + (BOOL) resolveClassMethod: (SEL)selector;
44536
44537 in the case of a class method.  If the class implements it, the runtime
44538invokes it, passing as argument the selector of the original method, and
44539if it returns 'YES', the runtime tries the lookup again, which could now
44540succeed if a matching method was added dynamically by
44541'+resolveInstanceMethod:' or '+resolveClassMethod:'.
44542
44543 This allows classes to dynamically register methods (by adding them to
44544the class using 'class_addMethod') when they are first called.  To do
44545so, a class should implement '+resolveInstanceMethod:' (or, depending on
44546the case, '+resolveClassMethod:') and have it recognize the selectors of
44547methods that can be registered dynamically at runtime, register them,
44548and return 'YES'.  It should return 'NO' for methods that it does not
44549dynamically registered at runtime.
44550
44551 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
44552implemented or returns 'NO', the runtime then tries the forwarding hook.
44553
44554 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
44555added to the GNU Objective-C runtime in GCC version 4.6.
44556
44557
44558File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
44559
445608.10.2 Forwarding hook
44561----------------------
44562
44563The GNU Objective-C runtime provides a hook, called
44564'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
44565can't find a method implementation in the runtime tables and after
44566calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
44567attempted and did not succeed in dynamically registering the method.
44568
44569 To configure the hook, you set the global variable
44570'__objc_msg_forward2' to a function with the same argument and return
44571types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' can not find a
44572method implementation, it invokes the hook function you provided to get
44573a method implementation to return.  So, in practice
44574'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
44575some custom code that is called to do a further lookup when no standard
44576method implementation can be found using the normal lookup.
44577
44578 This hook is generally reserved for "Foundation" libraries such as
44579GNUstep Base, which use it to implement their high-level method
44580forwarding API, typically based around the 'forwardInvocation:' method.
44581So, unless you are implementing your own "Foundation" library, you
44582should not set this hook.
44583
44584 In a typical forwarding implementation, the '__objc_msg_forward2' hook
44585function determines the argument and return type of the method that is
44586being looked up, and then creates a function that takes these arguments
44587and has that return type, and returns it to the caller.  Creating this
44588function is non-trivial and is typically performed using a dedicated
44589library such as 'libffi'.
44590
44591 The forwarding method implementation thus created is returned by
44592'objc_msg_lookup()' and is executed as if it was a normal method
44593implementation.  When the forwarding method implementation is called, it
44594is usually expected to pack all arguments into some sort of object
44595(typically, an 'NSInvocation' in a "Foundation" library), and hand it
44596over to the programmer ('forwardInvocation:') who is then allowed to
44597manipulate the method invocation using a high-level API provided by the
44598"Foundation" library.  For example, the programmer may want to examine
44599the method invocation arguments and name and potentially change them
44600before forwarding the method invocation to one or more local objects
44601('performInvocation:') or even to remote objects (by using Distributed
44602Objects or some other mechanism).  When all this completes, the return
44603value is passed back and must be returned correctly to the original
44604caller.
44605
44606 Note that the GNU Objective-C runtime currently provides no support for
44607method forwarding or method invocations other than the
44608'__objc_msg_forward2' hook.
44609
44610 If the forwarding hook does not exist or returns 'NULL', the runtime
44611currently attempts forwarding using an older, deprecated API, and if
44612that fails, it aborts the program.  In future versions of the GNU
44613Objective-C runtime, the runtime will immediately abort.
44614
44615
44616File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
44617
446189 Binary Compatibility
44619**********************
44620
44621Binary compatibility encompasses several related concepts:
44622
44623"application binary interface (ABI)"
44624     The set of runtime conventions followed by all of the tools that
44625     deal with binary representations of a program, including compilers,
44626     assemblers, linkers, and language runtime support.  Some ABIs are
44627     formal with a written specification, possibly designed by multiple
44628     interested parties.  Others are simply the way things are actually
44629     done by a particular set of tools.
44630
44631"ABI conformance"
44632     A compiler conforms to an ABI if it generates code that follows all
44633     of the specifications enumerated by that ABI.  A library conforms
44634     to an ABI if it is implemented according to that ABI.  An
44635     application conforms to an ABI if it is built using tools that
44636     conform to that ABI and does not contain source code that
44637     specifically changes behavior specified by the ABI.
44638
44639"calling conventions"
44640     Calling conventions are a subset of an ABI that specify of how
44641     arguments are passed and function results are returned.
44642
44643"interoperability"
44644     Different sets of tools are interoperable if they generate files
44645     that can be used in the same program.  The set of tools includes
44646     compilers, assemblers, linkers, libraries, header files, startup
44647     files, and debuggers.  Binaries produced by different sets of tools
44648     are not interoperable unless they implement the same ABI.  This
44649     applies to different versions of the same tools as well as tools
44650     from different vendors.
44651
44652"intercallability"
44653     Whether a function in a binary built by one set of tools can call a
44654     function in a binary built by a different set of tools is a subset
44655     of interoperability.
44656
44657"implementation-defined features"
44658     Language standards include lists of implementation-defined features
44659     whose behavior can vary from one implementation to another.  Some
44660     of these features are normally covered by a platform's ABI and
44661     others are not.  The features that are not covered by an ABI
44662     generally affect how a program behaves, but not intercallability.
44663
44664"compatibility"
44665     Conformance to the same ABI and the same behavior of
44666     implementation-defined features are both relevant for
44667     compatibility.
44668
44669 The application binary interface implemented by a C or C++ compiler
44670affects code generation and runtime support for:
44671
44672   * size and alignment of data types
44673   * layout of structured types
44674   * calling conventions
44675   * register usage conventions
44676   * interfaces for runtime arithmetic support
44677   * object file formats
44678
44679 In addition, the application binary interface implemented by a C++
44680compiler affects code generation and runtime support for:
44681   * name mangling
44682   * exception handling
44683   * invoking constructors and destructors
44684   * layout, alignment, and padding of classes
44685   * layout and alignment of virtual tables
44686
44687 Some GCC compilation options cause the compiler to generate code that
44688does not conform to the platform's default ABI.  Other options cause
44689different program behavior for implementation-defined features that are
44690not covered by an ABI.  These options are provided for consistency with
44691other compilers that do not follow the platform's default ABI or the
44692usual behavior of implementation-defined features for the platform.  Be
44693very careful about using such options.
44694
44695 Most platforms have a well-defined ABI that covers C code, but ABIs
44696that cover C++ functionality are not yet common.
44697
44698 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
44699written, vendor-neutral C++ ABI that was designed to be specific to
4470064-bit Itanium but also includes generic specifications that apply to
44701any platform.  This C++ ABI is also implemented by other compiler
44702vendors on some platforms, notably GNU/Linux and BSD systems.  We have
44703tried hard to provide a stable ABI that will be compatible with future
44704GCC releases, but it is possible that we will encounter problems that
44705make this difficult.  Such problems could include different
44706interpretations of the C++ ABI by different vendors, bugs in the ABI, or
44707bugs in the implementation of the ABI in different compilers.  GCC's
44708'-Wabi' switch warns when G++ generates code that is probably not
44709compatible with the C++ ABI.
44710
44711 The C++ library used with a C++ compiler includes the Standard C++
44712Library, with functionality defined in the C++ Standard, plus language
44713runtime support.  The runtime support is included in a C++ ABI, but
44714there is no formal ABI for the Standard C++ Library.  Two
44715implementations of that library are interoperable if one follows the
44716de-facto ABI of the other and if they are both built with the same
44717compiler, or with compilers that conform to the same ABI for C++
44718compiler and runtime support.
44719
44720 When G++ and another C++ compiler conform to the same C++ ABI, but the
44721implementations of the Standard C++ Library that they normally use do
44722not follow the same ABI for the Standard C++ Library, object files built
44723with those compilers can be used in the same program only if they use
44724the same C++ library.  This requires specifying the location of the C++
44725library header files when invoking the compiler whose usual library is
44726not being used.  The location of GCC's C++ header files depends on how
44727the GCC build was configured, but can be seen by using the G++ '-v'
44728option.  With default configuration options for G++ 3.3 the compile line
44729for a different C++ compiler needs to include
44730
44731         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
44732
44733 Similarly, compiling code with G++ that must use a C++ library other
44734than the GNU C++ library requires specifying the location of the header
44735files for that other library.
44736
44737 The most straightforward way to link a program to use a particular C++
44738library is to use a C++ driver that specifies that C++ library by
44739default.  The 'g++' driver, for example, tells the linker where to find
44740GCC's C++ library ('libstdc++') plus the other libraries and startup
44741files it needs, in the proper order.
44742
44743 If a program must use a different C++ library and it's not possible to
44744do the final link using a C++ driver that uses that library by default,
44745it is necessary to tell 'g++' the location and name of that library.  It
44746might also be necessary to specify different startup files and other
44747runtime support libraries, and to suppress the use of GCC's support
44748libraries with one or more of the options '-nostdlib', '-nostartfiles',
44749and '-nodefaultlibs'.
44750
44751
44752File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
44753
4475410 'gcov'--a Test Coverage Program
44755**********************************
44756
44757'gcov' is a tool you can use in conjunction with GCC to test code
44758coverage in your programs.
44759
44760* Menu:
44761
44762* Gcov Intro::                  Introduction to gcov.
44763* Invoking Gcov::               How to use gcov.
44764* Gcov and Optimization::       Using gcov with GCC optimization.
44765* Gcov Data Files::             The files used by gcov.
44766* Cross-profiling::             Data file relocation.
44767
44768
44769File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
44770
4477110.1 Introduction to 'gcov'
44772===========================
44773
44774'gcov' is a test coverage program.  Use it in concert with GCC to
44775analyze your programs to help create more efficient, faster running code
44776and to discover untested parts of your program.  You can use 'gcov' as a
44777profiling tool to help discover where your optimization efforts will
44778best affect your code.  You can also use 'gcov' along with the other
44779profiling tool, 'gprof', to assess which parts of your code use the
44780greatest amount of computing time.
44781
44782 Profiling tools help you analyze your code's performance.  Using a
44783profiler such as 'gcov' or 'gprof', you can find out some basic
44784performance statistics, such as:
44785
44786   * how often each line of code executes
44787
44788   * what lines of code are actually executed
44789
44790   * how much computing time each section of code uses
44791
44792 Once you know these things about how your code works when compiled, you
44793can look at each module to see which modules should be optimized.
44794'gcov' helps you determine where to work on optimization.
44795
44796 Software developers also use coverage testing in concert with
44797testsuites, to make sure software is actually good enough for a release.
44798Testsuites can verify that a program works as expected; a coverage
44799program tests to see how much of the program is exercised by the
44800testsuite.  Developers can then determine what kinds of test cases need
44801to be added to the testsuites to create both better testing and a better
44802final product.
44803
44804 You should compile your code without optimization if you plan to use
44805'gcov' because the optimization, by combining some lines of code into
44806one function, may not give you as much information as you need to look
44807for 'hot spots' where the code is using a great deal of computer time.
44808Likewise, because 'gcov' accumulates statistics by line (at the lowest
44809resolution), it works best with a programming style that places only one
44810statement on each line.  If you use complicated macros that expand to
44811loops or to other control structures, the statistics are less
44812helpful--they only report on the line where the macro call appears.  If
44813your complex macros behave like functions, you can replace them with
44814inline functions to solve this problem.
44815
44816 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
44817many times each line of a source file 'SOURCEFILE.c' has executed.  You
44818can use these logfiles along with 'gprof' to aid in fine-tuning the
44819performance of your programs.  'gprof' gives timing information you can
44820use along with the information you get from 'gcov'.
44821
44822 'gcov' works only on code compiled with GCC.  It is not compatible with
44823any other profiling or test coverage mechanism.
44824
44825
44826File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
44827
4482810.2 Invoking 'gcov'
44829====================
44830
44831     gcov [OPTIONS] FILES
44832
44833 'gcov' accepts the following options:
44834
44835'-h'
44836'--help'
44837     Display help about using 'gcov' (on the standard output), and exit
44838     without doing any further processing.
44839
44840'-v'
44841'--version'
44842     Display the 'gcov' version number (on the standard output), and
44843     exit without doing any further processing.
44844
44845'-a'
44846'--all-blocks'
44847     Write individual execution counts for every basic block.  Normally
44848     gcov outputs execution counts only for the main blocks of a line.
44849     With this option you can determine if blocks within a single line
44850     are not being executed.
44851
44852'-b'
44853'--branch-probabilities'
44854     Write branch frequencies to the output file, and write branch
44855     summary info to the standard output.  This option allows you to see
44856     how often each branch in your program was taken.  Unconditional
44857     branches will not be shown, unless the '-u' option is given.
44858
44859'-c'
44860'--branch-counts'
44861     Write branch frequencies as the number of branches taken, rather
44862     than the percentage of branches taken.
44863
44864'-n'
44865'--no-output'
44866     Do not create the 'gcov' output file.
44867
44868'-l'
44869'--long-file-names'
44870     Create long file names for included source files.  For example, if
44871     the header file 'x.h' contains code, and was included in the file
44872     'a.c', then running 'gcov' on the file 'a.c' will produce an output
44873     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
44874     useful if 'x.h' is included in multiple source files and you want
44875     to see the individual contributions.  If you use the '-p' option,
44876     both the including and included file names will be complete path
44877     names.
44878
44879'-p'
44880'--preserve-paths'
44881     Preserve complete path information in the names of generated
44882     '.gcov' files.  Without this option, just the filename component is
44883     used.  With this option, all directories are used, with '/'
44884     characters translated to '#' characters, '.' directory components
44885     removed and unremoveable '..' components renamed to '^'.  This is
44886     useful if sourcefiles are in several different directories.
44887
44888'-r'
44889'--relative-only'
44890     Only output information about source files with a relative pathname
44891     (after source prefix elision).  Absolute paths are usually system
44892     header files and coverage of any inline functions therein is
44893     normally uninteresting.
44894
44895'-f'
44896'--function-summaries'
44897     Output summaries for each function in addition to the file level
44898     summary.
44899
44900'-o DIRECTORY|FILE'
44901'--object-directory DIRECTORY'
44902'--object-file FILE'
44903     Specify either the directory containing the gcov data files, or the
44904     object path name.  The '.gcno', and '.gcda' data files are searched
44905     for using this option.  If a directory is specified, the data files
44906     are in that directory and named after the input file name, without
44907     its extension.  If a file is specified here, the data files are
44908     named after that file, without its extension.
44909
44910'-s DIRECTORY'
44911'--source-prefix DIRECTORY'
44912     A prefix for source file names to remove when generating the output
44913     coverage files.  This option is useful when building in a separate
44914     directory, and the pathname to the source directory is not wanted
44915     when determining the output file names.  Note that this prefix
44916     detection is applied before determining whether the source file is
44917     absolute.
44918
44919'-u'
44920'--unconditional-branches'
44921     When branch probabilities are given, include those of unconditional
44922     branches.  Unconditional branches are normally not interesting.
44923
44924'-d'
44925'--display-progress'
44926     Display the progress on the standard output.
44927
44928 'gcov' should be run with the current directory the same as that when
44929you invoked the compiler.  Otherwise it will not be able to locate the
44930source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
44931current directory.  These contain the coverage information of the source
44932file they correspond to.  One '.gcov' file is produced for each source
44933(or header) file containing code, which was compiled to produce the data
44934files.  The MANGLEDNAME part of the output file name is usually simply
44935the source file name, but can be something more complicated if the '-l'
44936or '-p' options are given.  Refer to those options for details.
44937
44938 If you invoke 'gcov' with multiple input files, the contributions from
44939each input file are summed.  Typically you would invoke it with the same
44940list of files as the final link of your executable.
44941
44942 The '.gcov' files contain the ':' separated fields along with program
44943source code.  The format is
44944
44945     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
44946
44947 Additional block information may succeed each line, when requested by
44948command line option.  The EXECUTION_COUNT is '-' for lines containing no
44949code.  Unexecuted lines are marked '#####' or '====', depending on
44950whether they are reachable by non-exceptional paths or only exceptional
44951paths such as C++ exception handlers, respectively.
44952
44953 Some lines of information at the start have LINE_NUMBER of zero.  These
44954preamble lines are of the form
44955
44956     -:0:TAG:VALUE
44957
44958 The ordering and number of these preamble lines will be augmented as
44959'gcov' development progresses -- do not rely on them remaining
44960unchanged.  Use TAG to locate a particular preamble line.
44961
44962 The additional block information is of the form
44963
44964     TAG INFORMATION
44965
44966 The INFORMATION is human readable, but designed to be simple enough for
44967machine parsing too.
44968
44969 When printing percentages, 0% and 100% are only printed when the values
44970are _exactly_ 0% and 100% respectively.  Other values which would
44971conventionally be rounded to 0% or 100% are instead printed as the
44972nearest non-boundary value.
44973
44974 When using 'gcov', you must first compile your program with two special
44975GCC options: '-fprofile-arcs -ftest-coverage'.  This tells the compiler
44976to generate additional information needed by gcov (basically a flow
44977graph of the program) and also includes additional code in the object
44978files for generating the extra profiling information needed by gcov.
44979These additional files are placed in the directory where the object file
44980is located.
44981
44982 Running the program will cause profile output to be generated.  For
44983each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
44984file will be placed in the object file directory.
44985
44986 Running 'gcov' with your program's source file names as arguments will
44987now produce a listing of the code along with frequency of execution for
44988each line.  For example, if your program is called 'tmp.c', this is what
44989you see when you use the basic 'gcov' facility:
44990
44991     $ gcc -fprofile-arcs -ftest-coverage tmp.c
44992     $ a.out
44993     $ gcov tmp.c
44994     90.00% of 10 source lines executed in file tmp.c
44995     Creating tmp.c.gcov.
44996
44997 The file 'tmp.c.gcov' contains output from 'gcov'.  Here is a sample:
44998
44999             -:    0:Source:tmp.c
45000             -:    0:Graph:tmp.gcno
45001             -:    0:Data:tmp.gcda
45002             -:    0:Runs:1
45003             -:    0:Programs:1
45004             -:    1:#include <stdio.h>
45005             -:    2:
45006             -:    3:int main (void)
45007             1:    4:{
45008             1:    5:  int i, total;
45009             -:    6:
45010             1:    7:  total = 0;
45011             -:    8:
45012            11:    9:  for (i = 0; i < 10; i++)
45013            10:   10:    total += i;
45014             -:   11:
45015             1:   12:  if (total != 45)
45016         #####:   13:    printf ("Failure\n");
45017             -:   14:  else
45018             1:   15:    printf ("Success\n");
45019             1:   16:  return 0;
45020             -:   17:}
45021
45022 When you use the '-a' option, you will get individual block counts, and
45023the output looks like this:
45024
45025             -:    0:Source:tmp.c
45026             -:    0:Graph:tmp.gcno
45027             -:    0:Data:tmp.gcda
45028             -:    0:Runs:1
45029             -:    0:Programs:1
45030             -:    1:#include <stdio.h>
45031             -:    2:
45032             -:    3:int main (void)
45033             1:    4:{
45034             1:    4-block  0
45035             1:    5:  int i, total;
45036             -:    6:
45037             1:    7:  total = 0;
45038             -:    8:
45039            11:    9:  for (i = 0; i < 10; i++)
45040            11:    9-block  0
45041            10:   10:    total += i;
45042            10:   10-block  0
45043             -:   11:
45044             1:   12:  if (total != 45)
45045             1:   12-block  0
45046         #####:   13:    printf ("Failure\n");
45047         $$$$$:   13-block  0
45048             -:   14:  else
45049             1:   15:    printf ("Success\n");
45050             1:   15-block  0
45051             1:   16:  return 0;
45052             1:   16-block  0
45053             -:   17:}
45054
45055 In this mode, each basic block is only shown on one line - the last
45056line of the block.  A multi-line block will only contribute to the
45057execution count of that last line, and other lines will not be shown to
45058contain code, unless previous blocks end on those lines.  The total
45059execution count of a line is shown and subsequent lines show the
45060execution counts for individual blocks that end on that line.  After
45061each block, the branch and call counts of the block will be shown, if
45062the '-b' option is given.
45063
45064 Because of the way GCC instruments calls, a call count can be shown
45065after a line with no individual blocks.  As you can see, line 13
45066contains a basic block that was not executed.
45067
45068 When you use the '-b' option, your output looks like this:
45069
45070     $ gcov -b tmp.c
45071     90.00% of 10 source lines executed in file tmp.c
45072     80.00% of 5 branches executed in file tmp.c
45073     80.00% of 5 branches taken at least once in file tmp.c
45074     50.00% of 2 calls executed in file tmp.c
45075     Creating tmp.c.gcov.
45076
45077 Here is a sample of a resulting 'tmp.c.gcov' file:
45078
45079             -:    0:Source:tmp.c
45080             -:    0:Graph:tmp.gcno
45081             -:    0:Data:tmp.gcda
45082             -:    0:Runs:1
45083             -:    0:Programs:1
45084             -:    1:#include <stdio.h>
45085             -:    2:
45086             -:    3:int main (void)
45087     function main called 1 returned 1 blocks executed 75%
45088             1:    4:{
45089             1:    5:  int i, total;
45090             -:    6:
45091             1:    7:  total = 0;
45092             -:    8:
45093            11:    9:  for (i = 0; i < 10; i++)
45094     branch  0 taken 91% (fallthrough)
45095     branch  1 taken 9%
45096            10:   10:    total += i;
45097             -:   11:
45098             1:   12:  if (total != 45)
45099     branch  0 taken 0% (fallthrough)
45100     branch  1 taken 100%
45101         #####:   13:    printf ("Failure\n");
45102     call    0 never executed
45103             -:   14:  else
45104             1:   15:    printf ("Success\n");
45105     call    0 called 1 returned 100%
45106             1:   16:  return 0;
45107             -:   17:}
45108
45109 For each function, a line is printed showing how many times the
45110function is called, how many times it returns and what percentage of the
45111function's blocks were executed.
45112
45113 For each basic block, a line is printed after the last line of the
45114basic block describing the branch or call that ends the basic block.
45115There can be multiple branches and calls listed for a single source line
45116if there are multiple basic blocks that end on that line.  In this case,
45117the branches and calls are each given a number.  There is no simple way
45118to map these branches and calls back to source constructs.  In general,
45119though, the lowest numbered branch or call will correspond to the
45120leftmost construct on the source line.
45121
45122 For a branch, if it was executed at least once, then a percentage
45123indicating the number of times the branch was taken divided by the
45124number of times the branch was executed will be printed.  Otherwise, the
45125message "never executed" is printed.
45126
45127 For a call, if it was executed at least once, then a percentage
45128indicating the number of times the call returned divided by the number
45129of times the call was executed will be printed.  This will usually be
45130100%, but may be less for functions that call 'exit' or 'longjmp', and
45131thus may not return every time they are called.
45132
45133 The execution counts are cumulative.  If the example program were
45134executed again without removing the '.gcda' file, the count for the
45135number of times each line in the source was executed would be added to
45136the results of the previous run(s).  This is potentially useful in
45137several ways.  For example, it could be used to accumulate data over a
45138number of program runs as part of a test verification suite, or to
45139provide more accurate long-term information over a large number of
45140program runs.
45141
45142 The data in the '.gcda' files is saved immediately before the program
45143exits.  For each source file compiled with '-fprofile-arcs', the
45144profiling code first attempts to read in an existing '.gcda' file; if
45145the file doesn't match the executable (differing number of basic block
45146counts) it will ignore the contents of the file.  It then adds in the
45147new execution counts and finally writes the data to the file.
45148
45149
45150File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
45151
4515210.3 Using 'gcov' with GCC Optimization
45153=======================================
45154
45155If you plan to use 'gcov' to help optimize your code, you must first
45156compile your program with two special GCC options: '-fprofile-arcs
45157-ftest-coverage'.  Aside from that, you can use any other GCC options;
45158but if you want to prove that every single line in your program was
45159executed, you should not compile with optimization at the same time.  On
45160some machines the optimizer can eliminate some simple code lines by
45161combining them with other lines.  For example, code like this:
45162
45163     if (a != b)
45164       c = 1;
45165     else
45166       c = 0;
45167
45168can be compiled into one instruction on some machines.  In this case,
45169there is no way for 'gcov' to calculate separate execution counts for
45170each line because there isn't separate code for each line.  Hence the
45171'gcov' output looks like this if you compiled the program with
45172optimization:
45173
45174           100:   12:if (a != b)
45175           100:   13:  c = 1;
45176           100:   14:else
45177           100:   15:  c = 0;
45178
45179 The output shows that this block of code, combined by optimization,
45180executed 100 times.  In one sense this result is correct, because there
45181was only one instruction representing all four of these lines.  However,
45182the output does not indicate how many times the result was 0 and how
45183many times the result was 1.
45184
45185 Inlineable functions can create unexpected line counts.  Line counts
45186are shown for the source code of the inlineable function, but what is
45187shown depends on where the function is inlined, or if it is not inlined
45188at all.
45189
45190 If the function is not inlined, the compiler must emit an out of line
45191copy of the function, in any object file that needs it.  If 'fileA.o'
45192and 'fileB.o' both contain out of line bodies of a particular inlineable
45193function, they will also both contain coverage counts for that function.
45194When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
45195many systems, select one of those out of line bodies for all calls to
45196that function, and remove or ignore the other.  Unfortunately, it will
45197not remove the coverage counters for the unused function body.  Hence
45198when instrumented, all but one use of that function will show zero
45199counts.
45200
45201 If the function is inlined in several places, the block structure in
45202each location might not be the same.  For instance, a condition might
45203now be calculable at compile time in some instances.  Because the
45204coverage of all the uses of the inline function will be shown for the
45205same source lines, the line counts themselves might seem inconsistent.
45206
45207 Long-running applications can use the '_gcov_reset' and '_gcov_dump'
45208facilities to restrict profile collection to the program region of
45209interest.  Calling '_gcov_reset(void)' will clear all profile counters
45210to zero, and calling '_gcov_dump(void)' will cause the profile
45211information collected at that point to be dumped to '.gcda' output
45212files.
45213
45214
45215File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
45216
4521710.4 Brief description of 'gcov' data files
45218===========================================
45219
45220'gcov' uses two files for profiling.  The names of these files are
45221derived from the original _object_ file by substituting the file suffix
45222with either '.gcno', or '.gcda'.  The files contain coverage and profile
45223data stored in a platform-independent format.  The '.gcno' files are
45224placed in the same directory as the object file.  By default, the
45225'.gcda' files are also stored in the same directory as the object file,
45226but the GCC '-fprofile-dir' option may be used to store the '.gcda'
45227files in a separate directory.
45228
45229 The '.gcno' notes file is generated when the source file is compiled
45230with the GCC '-ftest-coverage' option.  It contains information to
45231reconstruct the basic block graphs and assign source line numbers to
45232blocks.
45233
45234 The '.gcda' count data file is generated when a program containing
45235object files built with the GCC '-fprofile-arcs' option is executed.  A
45236separate '.gcda' file is created for each object file compiled with this
45237option.  It contains arc transition counts, value profile counts, and
45238some summary information.
45239
45240 The full details of the file format is specified in 'gcov-io.h', and
45241functions provided in that header file should be used to access the
45242coverage files.
45243
45244
45245File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
45246
4524710.5 Data file relocation to support cross-profiling
45248====================================================
45249
45250Running the program will cause profile output to be generated.  For each
45251source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
45252will be placed in the object file directory.  That implicitly requires
45253running the program on the same system as it was built or having the
45254same absolute directory structure on the target system.  The program
45255will try to create the needed directory structure, if it is not already
45256present.
45257
45258 To support cross-profiling, a program compiled with '-fprofile-arcs'
45259can relocate the data files based on two environment variables:
45260
45261   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
45262     object file.  Prefix can be absolute, or relative.  The default is
45263     no prefix.
45264
45265   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
45266     strip off the hardwired absolute paths.  Default value is 0.
45267
45268     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
45269     undefined, then a relative path is made out of the hardwired
45270     absolute paths.
45271
45272 For example, if the object file '/user/build/foo.o' was built with
45273'-fprofile-arcs', the final executable will try to create the data file
45274'/user/build/foo.gcda' when running on the target system.  This will
45275fail if the corresponding directory does not exist and it is unable to
45276create it.  This can be overcome by, for example, setting the
45277environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
45278Such a setting will name the data file '/target/run/build/foo.gcda'.
45279
45280 You must move the data files to the expected directory tree in order to
45281use them for profile directed optimizations ('--use-profile'), or to use
45282the 'gcov' tool.
45283
45284
45285File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
45286
4528711 Known Causes of Trouble with GCC
45288***********************************
45289
45290This section describes known problems that affect users of GCC.  Most of
45291these are not GCC bugs per se--if they were, we would fix them.  But the
45292result for a user may be like the result of a bug.
45293
45294 Some of these problems are due to bugs in other software, some are
45295missing features that are too much work to add, and some are places
45296where people's opinions differ as to what is best.
45297
45298* Menu:
45299
45300* Actual Bugs::         Bugs we will fix later.
45301* Interoperation::      Problems using GCC with other compilers,
45302                        and with certain linkers, assemblers and debuggers.
45303* Incompatibilities::   GCC is incompatible with traditional C.
45304* Fixed Headers::       GCC uses corrected versions of system header files.
45305                        This is necessary, but doesn't always work smoothly.
45306* Standard Libraries::  GCC uses the system C library, which might not be
45307                        compliant with the ISO C standard.
45308* Disappointments::     Regrettable things we can't change, but not quite bugs.
45309* C++ Misunderstandings:: Common misunderstandings with GNU C++.
45310* Non-bugs::            Things we think are right, but some others disagree.
45311* Warnings and Errors:: Which problems in your code get warnings,
45312                        and which get errors.
45313
45314
45315File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
45316
4531711.1 Actual Bugs We Haven't Fixed Yet
45318=====================================
45319
45320   * The 'fixincludes' script interacts badly with automounters; if the
45321     directory of system header files is automounted, it tends to be
45322     unmounted while 'fixincludes' is running.  This would seem to be a
45323     bug in the automounter.  We don't know any good way to work around
45324     it.
45325
45326
45327File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
45328
4532911.2 Interoperation
45330===================
45331
45332This section lists various difficulties encountered in using GCC
45333together with other compilers or with the assemblers, linkers, libraries
45334and debuggers on certain systems.
45335
45336   * On many platforms, GCC supports a different ABI for C++ than do
45337     other compilers, so the object files compiled by GCC cannot be used
45338     with object files generated by another C++ compiler.
45339
45340     An area where the difference is most apparent is name mangling.
45341     The use of different name mangling is intentional, to protect you
45342     from more subtle problems.  Compilers differ as to many internal
45343     details of C++ implementation, including: how class instances are
45344     laid out, how multiple inheritance is implemented, and how virtual
45345     function calls are handled.  If the name encoding were made the
45346     same, your programs would link against libraries provided from
45347     other compilers--but the programs would then crash when run.
45348     Incompatible libraries are then detected at link time, rather than
45349     at run time.
45350
45351   * On some BSD systems, including some versions of Ultrix, use of
45352     profiling causes static variable destructors (currently used only
45353     in C++) not to be run.
45354
45355   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
45356     boundary, and it expects every 'double' to be so aligned.  The Sun
45357     compiler usually gives 'double' values 8-byte alignment, with one
45358     exception: function arguments of type 'double' may not be aligned.
45359
45360     As a result, if a function compiled with Sun CC takes the address
45361     of an argument of type 'double' and passes this pointer of type
45362     'double *' to a function compiled with GCC, dereferencing the
45363     pointer may cause a fatal signal.
45364
45365     One way to solve this problem is to compile your entire program
45366     with GCC.  Another solution is to modify the function that is
45367     compiled with Sun CC to copy the argument into a local variable;
45368     local variables are always properly aligned.  A third solution is
45369     to modify the function that uses the pointer to dereference it via
45370     the following function 'access_double' instead of directly with
45371     '*':
45372
45373          inline double
45374          access_double (double *unaligned_ptr)
45375          {
45376            union d2i { double d; int i[2]; };
45377
45378            union d2i *p = (union d2i *) unaligned_ptr;
45379            union d2i u;
45380
45381            u.i[0] = p->i[0];
45382            u.i[1] = p->i[1];
45383
45384            return u.d;
45385          }
45386
45387     Storing into the pointer can be done likewise with the same union.
45388
45389   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
45390     allocate memory that is only 4 byte aligned.  Since GCC on the
45391     SPARC assumes that doubles are 8 byte aligned, this may result in a
45392     fatal signal if doubles are stored in memory allocated by the
45393     'libmalloc.a' library.
45394
45395     The solution is to not use the 'libmalloc.a' library.  Use instead
45396     'malloc' and related functions from 'libc.a'; they do not have this
45397     problem.
45398
45399   * On the HP PA machine, ADB sometimes fails to work on functions
45400     compiled with GCC.  Specifically, it fails to work on functions
45401     that use 'alloca' or variable-size arrays.  This is because GCC
45402     doesn't generate HP-UX unwind descriptors for such functions.  It
45403     may even be impossible to generate them.
45404
45405   * Debugging ('-g') is not supported on the HP PA machine, unless you
45406     use the preliminary GNU tools.
45407
45408   * Taking the address of a label may generate errors from the HP-UX PA
45409     assembler.  GAS for the PA does not have this problem.
45410
45411   * Using floating point parameters for indirect calls to static
45412     functions will not work when using the HP assembler.  There simply
45413     is no way for GCC to specify what registers hold arguments for
45414     static functions when using the HP assembler.  GAS for the PA does
45415     not have this problem.
45416
45417   * In extremely rare cases involving some very large functions you may
45418     receive errors from the HP linker complaining about an out of
45419     bounds unconditional branch offset.  This used to occur more often
45420     in previous versions of GCC, but is now exceptionally rare.  If you
45421     should run into it, you can work around by making your function
45422     smaller.
45423
45424   * GCC compiled code sometimes emits warnings from the HP-UX assembler
45425     of the form:
45426
45427          (warning) Use of GR3 when
45428            frame >= 8192 may cause conflict.
45429
45430     These warnings are harmless and can be safely ignored.
45431
45432   * In extremely rare cases involving some very large functions you may
45433     receive errors from the AIX Assembler complaining about a
45434     displacement that is too large.  If you should run into it, you can
45435     work around by making your function smaller.
45436
45437   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
45438     semantics which merges global symbols between libraries and
45439     applications, especially necessary for C++ streams functionality.
45440     This is not the default behavior of AIX shared libraries and
45441     dynamic linking.  'libstdc++.a' is built on AIX with
45442     "runtime-linking" enabled so that symbol merging can occur.  To
45443     utilize this feature, the application linked with 'libstdc++.a'
45444     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
45445     impose this because this option may interfere with the semantics of
45446     the user program and users may not always use 'g++' to link his or
45447     her application.  Applications are not required to use the
45448     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
45449     library which is not dependent on the symbol merging semantics will
45450     continue to function correctly.
45451
45452   * An application can interpose its own definition of functions for
45453     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
45454     on AIX.  To accomplish this the application must be linked with
45455     "runtime-linking" option and the functions explicitly must be
45456     exported by the application ('-Wl,-brtl,-bE:exportfile').
45457
45458   * AIX on the RS/6000 provides support (NLS) for environments outside
45459     of the United States.  Compilers and assemblers use NLS to support
45460     locale-specific representations of various objects including
45461     floating-point numbers ('.' vs ',' for separating decimal
45462     fractions).  There have been problems reported where the library
45463     linked with GCC does not produce the same floating-point formats
45464     that the assembler accepts.  If you have this problem, set the
45465     'LANG' environment variable to 'C' or 'En_US'.
45466
45467   * Even if you specify '-fdollars-in-identifiers', you cannot
45468     successfully use '$' in identifiers on the RS/6000 due to a
45469     restriction in the IBM assembler.  GAS supports these identifiers.
45470
45471
45472File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
45473
4547411.3 Incompatibilities of GCC
45475=============================
45476
45477There are several noteworthy incompatibilities between GNU C and K&R
45478(non-ISO) versions of C.
45479
45480   * GCC normally makes string constants read-only.  If several
45481     identical-looking string constants are used, GCC stores only one
45482     copy of the string.
45483
45484     One consequence is that you cannot call 'mktemp' with a string
45485     constant argument.  The function 'mktemp' always alters the string
45486     its argument points to.
45487
45488     Another consequence is that 'sscanf' does not work on some very old
45489     systems when passed a string constant as its format control string
45490     or input.  This is because 'sscanf' incorrectly tries to write into
45491     the string constant.  Likewise 'fscanf' and 'scanf'.
45492
45493     The solution to these problems is to change the program to use
45494     'char'-array variables with initialization strings for these
45495     purposes instead of string constants.
45496
45497   * '-2147483648' is positive.
45498
45499     This is because 2147483648 cannot fit in the type 'int', so
45500     (following the ISO C rules) its data type is 'unsigned long int'.
45501     Negating this value yields 2147483648 again.
45502
45503   * GCC does not substitute macro arguments when they appear inside of
45504     string constants.  For example, the following macro in GCC
45505
45506          #define foo(a) "a"
45507
45508     will produce output '"a"' regardless of what the argument A is.
45509
45510   * When you use 'setjmp' and 'longjmp', the only automatic variables
45511     guaranteed to remain valid are those declared 'volatile'.  This is
45512     a consequence of automatic register allocation.  Consider this
45513     function:
45514
45515          jmp_buf j;
45516
45517          foo ()
45518          {
45519            int a, b;
45520
45521            a = fun1 ();
45522            if (setjmp (j))
45523              return a;
45524
45525            a = fun2 ();
45526            /* 'longjmp (j)' may occur in 'fun3'. */
45527            return a + fun3 ();
45528          }
45529
45530     Here 'a' may or may not be restored to its first value when the
45531     'longjmp' occurs.  If 'a' is allocated in a register, then its
45532     first value is restored; otherwise, it keeps the last value stored
45533     in it.
45534
45535     If you use the '-W' option with the '-O' option, you will get a
45536     warning when GCC thinks such a problem might be possible.
45537
45538   * Programs that use preprocessing directives in the middle of macro
45539     arguments do not work with GCC.  For example, a program like this
45540     will not work:
45541
45542          foobar (
45543          #define luser
45544                  hack)
45545
45546     ISO C does not permit such a construct.
45547
45548   * K&R compilers allow comments to cross over an inclusion boundary
45549     (i.e. started in an include file and ended in the including file).
45550
45551   * Declarations of external variables and functions within a block
45552     apply only to the block containing the declaration.  In other
45553     words, they have the same scope as any other declaration in the
45554     same place.
45555
45556     In some other C compilers, an 'extern' declaration affects all the
45557     rest of the file even if it happens within a block.
45558
45559   * In traditional C, you can combine 'long', etc., with a typedef
45560     name, as shown here:
45561
45562          typedef int foo;
45563          typedef long foo bar;
45564
45565     In ISO C, this is not allowed: 'long' and other type modifiers
45566     require an explicit 'int'.
45567
45568   * PCC allows typedef names to be used as function parameters.
45569
45570   * Traditional C allows the following erroneous pair of declarations
45571     to appear together in a given scope:
45572
45573          typedef int foo;
45574          typedef foo foo;
45575
45576   * GCC treats all characters of identifiers as significant.  According
45577     to K&R-1 (2.2), "No more than the first eight characters are
45578     significant, although more may be used.".  Also according to K&R-1
45579     (2.2), "An identifier is a sequence of letters and digits; the
45580     first character must be a letter.  The underscore _ counts as a
45581     letter.", but GCC also allows dollar signs in identifiers.
45582
45583   * PCC allows whitespace in the middle of compound assignment
45584     operators such as '+='.  GCC, following the ISO standard, does not
45585     allow this.
45586
45587   * GCC complains about unterminated character constants inside of
45588     preprocessing conditionals that fail.  Some programs have English
45589     comments enclosed in conditionals that are guaranteed to fail; if
45590     these comments contain apostrophes, GCC will probably report an
45591     error.  For example, this code would produce an error:
45592
45593          #if 0
45594          You can't expect this to work.
45595          #endif
45596
45597     The best solution to such a problem is to put the text into an
45598     actual C comment delimited by '/*...*/'.
45599
45600   * Many user programs contain the declaration 'long time ();'.  In the
45601     past, the system header files on many systems did not actually
45602     declare 'time', so it did not matter what type your program
45603     declared it to return.  But in systems with ISO C headers, 'time'
45604     is declared to return 'time_t', and if that is not the same as
45605     'long', then 'long time ();' is erroneous.
45606
45607     The solution is to change your program to use appropriate system
45608     headers ('<time.h>' on systems with ISO C headers) and not to
45609     declare 'time' if the system header files declare it, or failing
45610     that to use 'time_t' as the return type of 'time'.
45611
45612   * When compiling functions that return 'float', PCC converts it to a
45613     double.  GCC actually returns a 'float'.  If you are concerned with
45614     PCC compatibility, you should declare your functions to return
45615     'double'; you might as well say what you mean.
45616
45617   * When compiling functions that return structures or unions, GCC
45618     output code normally uses a method different from that used on most
45619     versions of Unix.  As a result, code compiled with GCC cannot call
45620     a structure-returning function compiled with PCC, and vice versa.
45621
45622     The method used by GCC is as follows: a structure or union which is
45623     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
45624     union with any other size is stored into an address supplied by the
45625     caller (usually in a special, fixed register, but on some machines
45626     it is passed on the stack).  The target hook
45627     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
45628
45629     By contrast, PCC on most target machines returns structures and
45630     unions of any size by copying the data into an area of static
45631     storage, and then returning the address of that storage as if it
45632     were a pointer value.  The caller must copy the data from that
45633     memory area to the place where the value is wanted.  GCC does not
45634     use this method because it is slower and nonreentrant.
45635
45636     On some newer machines, PCC uses a reentrant convention for all
45637     structure and union returning.  GCC on most of these machines uses
45638     a compatible convention when returning structures and unions in
45639     memory, but still returns small structures and unions in registers.
45640
45641     You can tell GCC to use a compatible convention for all structure
45642     and union returning with the option '-fpcc-struct-return'.
45643
45644   * GCC complains about program fragments such as '0x74ae-0x4000' which
45645     appear to be two hexadecimal constants separated by the minus
45646     operator.  Actually, this string is a single "preprocessing token".
45647     Each such token must correspond to one token in C.  Since this does
45648     not, GCC prints an error message.  Although it may appear obvious
45649     that what is meant is an operator and two values, the ISO C
45650     standard specifically requires that this be treated as erroneous.
45651
45652     A "preprocessing token" is a "preprocessing number" if it begins
45653     with a digit and is followed by letters, underscores, digits,
45654     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
45655     character sequences.  (In strict C90 mode, the sequences 'p+',
45656     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
45657
45658     To make the above program fragment valid, place whitespace in front
45659     of the minus sign.  This whitespace will end the preprocessing
45660     number.
45661
45662
45663File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
45664
4566511.4 Fixed Header Files
45666=======================
45667
45668GCC needs to install corrected versions of some system header files.
45669This is because most target systems have some header files that won't
45670work with GCC unless they are changed.  Some have bugs, some are
45671incompatible with ISO C, and some depend on special features of other
45672compilers.
45673
45674 Installing GCC automatically creates and installs the fixed header
45675files, by running a program called 'fixincludes'.  Normally, you don't
45676need to pay attention to this.  But there are cases where it doesn't do
45677the right thing automatically.
45678
45679   * If you update the system's header files, such as by installing a
45680     new system version, the fixed header files of GCC are not
45681     automatically updated.  They can be updated using the 'mkheaders'
45682     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45683
45684   * On some systems, header file directories contain machine-specific
45685     symbolic links in certain places.  This makes it possible to share
45686     most of the header files among hosts running the same version of
45687     the system on different machine models.
45688
45689     The programs that fix the header files do not understand this
45690     special way of using symbolic links; therefore, the directory of
45691     fixed header files is good only for the machine model used to build
45692     it.
45693
45694     It is possible to make separate sets of fixed header files for the
45695     different machine models, and arrange a structure of symbolic links
45696     so as to use the proper set, but you'll have to do this by hand.
45697
45698
45699File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
45700
4570111.5 Standard Libraries
45702=======================
45703
45704GCC by itself attempts to be a conforming freestanding implementation.
45705*Note Language Standards Supported by GCC: Standards, for details of
45706what this means.  Beyond the library facilities required of such an
45707implementation, the rest of the C library is supplied by the vendor of
45708the operating system.  If that C library doesn't conform to the C
45709standards, then your programs might get warnings (especially when using
45710'-Wall') that you don't expect.
45711
45712 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
45713while the C standard says that 'sprintf' returns an 'int'.  The
45714'fixincludes' program could make the prototype for this function match
45715the Standard, but that would be wrong, since the function will still
45716return 'char *'.
45717
45718 If you need a Standard compliant library, then you need to find one, as
45719GCC does not provide one.  The GNU C library (called 'glibc') provides
45720ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
45721HURD-based GNU systems; no recent version of it supports other systems,
45722though some very old versions did.  Version 2.2 of the GNU C library
45723includes nearly complete C99 support.  You could also ask your operating
45724system vendor if newer libraries are available.
45725
45726
45727File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
45728
4572911.6 Disappointments and Misunderstandings
45730==========================================
45731
45732These problems are perhaps regrettable, but we don't know any practical
45733way around them.
45734
45735   * Certain local variables aren't recognized by debuggers when you
45736     compile with optimization.
45737
45738     This occurs because sometimes GCC optimizes the variable out of
45739     existence.  There is no way to tell the debugger how to compute the
45740     value such a variable "would have had", and it is not clear that
45741     would be desirable anyway.  So GCC simply does not mention the
45742     eliminated variable when it writes debugging information.
45743
45744     You have to expect a certain amount of disagreement between the
45745     executable and your source code, when you use optimization.
45746
45747   * Users often think it is a bug when GCC reports an error for code
45748     like this:
45749
45750          int foo (struct mumble *);
45751
45752          struct mumble { ... };
45753
45754          int foo (struct mumble *x)
45755          { ... }
45756
45757     This code really is erroneous, because the scope of 'struct mumble'
45758     in the prototype is limited to the argument list containing it.  It
45759     does not refer to the 'struct mumble' defined with file scope
45760     immediately below--they are two unrelated types with similar names
45761     in different scopes.
45762
45763     But in the definition of 'foo', the file-scope type is used because
45764     that is available to be inherited.  Thus, the definition and the
45765     prototype do not match, and you get an error.
45766
45767     This behavior may seem silly, but it's what the ISO standard
45768     specifies.  It is easy enough for you to make your code work by
45769     moving the definition of 'struct mumble' above the prototype.  It's
45770     not worth being incompatible with ISO C just to avoid an error for
45771     the example shown above.
45772
45773   * Accesses to bit-fields even in volatile objects works by accessing
45774     larger objects, such as a byte or a word.  You cannot rely on what
45775     size of object is accessed in order to read or write the bit-field;
45776     it may even vary for a given bit-field according to the precise
45777     usage.
45778
45779     If you care about controlling the amount of memory that is
45780     accessed, use volatile but do not use bit-fields.
45781
45782   * GCC comes with shell scripts to fix certain known problems in
45783     system header files.  They install corrected copies of various
45784     header files in a special directory where only GCC will normally
45785     look for them.  The scripts adapt to various systems by searching
45786     all the system header files for the problem cases that we know
45787     about.
45788
45789     If new system header files are installed, nothing automatically
45790     arranges to update the corrected header files.  They can be updated
45791     using the 'mkheaders' script installed in
45792     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45793
45794   * On 68000 and x86 systems, for instance, you can get paradoxical
45795     results if you test the precise values of floating point numbers.
45796     For example, you can find that a floating point value which is not
45797     a NaN is not equal to itself.  This results from the fact that the
45798     floating point registers hold a few more bits of precision than fit
45799     in a 'double' in memory.  Compiled code moves values between memory
45800     and floating point registers at its convenience, and moving them
45801     into memory truncates them.
45802
45803     You can partially avoid this problem by using the '-ffloat-store'
45804     option (*note Optimize Options::).
45805
45806   * On AIX and other platforms without weak symbol support, templates
45807     need to be instantiated explicitly and symbols for static members
45808     of templates will not be generated.
45809
45810   * On AIX, GCC scans object files and library archives for static
45811     constructors and destructors when linking an application before the
45812     linker prunes unreferenced symbols.  This is necessary to prevent
45813     the AIX linker from mistakenly assuming that static constructor or
45814     destructor are unused and removing them before the scanning can
45815     occur.  All static constructors and destructors found will be
45816     referenced even though the modules in which they occur may not be
45817     used by the program.  This may lead to both increased executable
45818     size and unexpected symbol references.
45819
45820
45821File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
45822
4582311.7 Common Misunderstandings with GNU C++
45824==========================================
45825
45826C++ is a complex language and an evolving one, and its standard
45827definition (the ISO C++ standard) was only recently completed.  As a
45828result, your C++ compiler may occasionally surprise you, even when its
45829behavior is correct.  This section discusses some areas that frequently
45830give rise to questions of this sort.
45831
45832* Menu:
45833
45834* Static Definitions::  Static member declarations are not definitions
45835* Name lookup::         Name lookup, templates, and accessing members of base classes
45836* Temporaries::         Temporaries may vanish before you expect
45837* Copy Assignment::     Copy Assignment operators copy virtual bases twice
45838
45839
45840File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
45841
4584211.7.1 Declare _and_ Define Static Members
45843------------------------------------------
45844
45845When a class has static data members, it is not enough to _declare_ the
45846static member; you must also _define_ it.  For example:
45847
45848     class Foo
45849     {
45850       ...
45851       void method();
45852       static int bar;
45853     };
45854
45855 This declaration only establishes that the class 'Foo' has an 'int'
45856named 'Foo::bar', and a member function named 'Foo::method'.  But you
45857still need to define _both_ 'method' and 'bar' elsewhere.  According to
45858the ISO standard, you must supply an initializer in one (and only one)
45859source file, such as:
45860
45861     int Foo::bar = 0;
45862
45863 Other C++ compilers may not correctly implement the standard behavior.
45864As a result, when you switch to 'g++' from one of these compilers, you
45865may discover that a program that appeared to work correctly in fact does
45866not conform to the standard: 'g++' reports as undefined symbols any
45867static data members that lack definitions.
45868
45869
45870File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
45871
4587211.7.2 Name lookup, templates, and accessing members of base classes
45873--------------------------------------------------------------------
45874
45875The C++ standard prescribes that all names that are not dependent on
45876template parameters are bound to their present definitions when parsing
45877a template function or class.(1)  Only names that are dependent are
45878looked up at the point of instantiation.  For example, consider
45879
45880       void foo(double);
45881
45882       struct A {
45883         template <typename T>
45884         void f () {
45885           foo (1);        // 1
45886           int i = N;      // 2
45887           T t;
45888           t.bar();        // 3
45889           foo (t);        // 4
45890         }
45891
45892         static const int N;
45893       };
45894
45895 Here, the names 'foo' and 'N' appear in a context that does not depend
45896on the type of 'T'.  The compiler will thus require that they are
45897defined in the context of use in the template, not only before the point
45898of instantiation, and will here use '::foo(double)' and 'A::N',
45899respectively.  In particular, it will convert the integer value to a
45900'double' when passing it to '::foo(double)'.
45901
45902 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
45903used in contexts that do depend on the type of 'T', so they are only
45904looked up at the point of instantiation, and you can provide
45905declarations for them after declaring the template, but before
45906instantiating it.  In particular, if you instantiate 'A::f<int>', the
45907last line will call an overloaded '::foo(int)' if one was provided, even
45908if after the declaration of 'struct A'.
45909
45910 This distinction between lookup of dependent and non-dependent names is
45911called two-stage (or dependent) name lookup.  G++ implements it since
45912version 3.4.
45913
45914 Two-stage name lookup sometimes leads to situations with behavior
45915different from non-template codes.  The most common is probably this:
45916
45917       template <typename T> struct Base {
45918         int i;
45919       };
45920
45921       template <typename T> struct Derived : public Base<T> {
45922         int get_i() { return i; }
45923       };
45924
45925 In 'get_i()', 'i' is not used in a dependent context, so the compiler
45926will look for a name declared at the enclosing namespace scope (which is
45927the global scope here).  It will not look into the base class, since
45928that is dependent and you may declare specializations of 'Base' even
45929after declaring 'Derived', so the compiler can't really know what 'i'
45930would refer to.  If there is no global variable 'i', then you will get
45931an error message.
45932
45933 In order to make it clear that you want the member of the base class,
45934you need to defer lookup until instantiation time, at which the base
45935class is known.  For this, you need to access 'i' in a dependent
45936context, by either using 'this->i' (remember that 'this' is of type
45937'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
45938Alternatively, 'Base<T>::i' might be brought into scope by a
45939'using'-declaration.
45940
45941 Another, similar example involves calling member functions of a base
45942class:
45943
45944       template <typename T> struct Base {
45945           int f();
45946       };
45947
45948       template <typename T> struct Derived : Base<T> {
45949           int g() { return f(); };
45950       };
45951
45952 Again, the call to 'f()' is not dependent on template arguments (there
45953are no arguments that depend on the type 'T', and it is also not
45954otherwise specified that the call should be in a dependent context).
45955Thus a global declaration of such a function must be available, since
45956the one in the base class is not visible until instantiation time.  The
45957compiler will consequently produce the following error message:
45958
45959       x.cc: In member function `int Derived<T>::g()':
45960       x.cc:6: error: there are no arguments to `f' that depend on a template
45961          parameter, so a declaration of `f' must be available
45962       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
45963          allowing the use of an undeclared name is deprecated)
45964
45965 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
45966Using the '-fpermissive' flag will also let the compiler accept the
45967code, by marking all function calls for which no declaration is visible
45968at the time of definition of the template for later lookup at
45969instantiation time, as if it were a dependent call.  We do not recommend
45970using '-fpermissive' to work around invalid code, and it will also only
45971catch cases where functions in base classes are called, not where
45972variables in base classes are used (as in the example above).
45973
45974 Note that some compilers (including G++ versions prior to 3.4) get
45975these examples wrong and accept above code without an error.  Those
45976compilers do not implement two-stage name lookup correctly.
45977
45978   ---------- Footnotes ----------
45979
45980   (1) The C++ standard just uses the term "dependent" for names that
45981depend on the type or value of template parameters.  This shorter term
45982will also be used in the rest of this section.
45983
45984
45985File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
45986
4598711.7.3 Temporaries May Vanish Before You Expect
45988-----------------------------------------------
45989
45990It is dangerous to use pointers or references to _portions_ of a
45991temporary object.  The compiler may very well delete the object before
45992you expect it to, leaving a pointer to garbage.  The most common place
45993where this problem crops up is in classes like string classes,
45994especially ones that define a conversion function to type 'char *' or
45995'const char *'--which is one reason why the standard 'string' class
45996requires you to call the 'c_str' member function.  However, any class
45997that returns a pointer to some internal structure is potentially subject
45998to this problem.
45999
46000 For example, a program may use a function 'strfunc' that returns
46001'string' objects, and another function 'charfunc' that operates on
46002pointers to 'char':
46003
46004     string strfunc ();
46005     void charfunc (const char *);
46006
46007     void
46008     f ()
46009     {
46010       const char *p = strfunc().c_str();
46011       ...
46012       charfunc (p);
46013       ...
46014       charfunc (p);
46015     }
46016
46017In this situation, it may seem reasonable to save a pointer to the C
46018string returned by the 'c_str' member function and use that rather than
46019call 'c_str' repeatedly.  However, the temporary string created by the
46020call to 'strfunc' is destroyed after 'p' is initialized, at which point
46021'p' is left pointing to freed memory.
46022
46023 Code like this may run successfully under some other compilers,
46024particularly obsolete cfront-based compilers that delete temporaries
46025along with normal local variables.  However, the GNU C++ behavior is
46026standard-conforming, so if your program depends on late destruction of
46027temporaries it is not portable.
46028
46029 The safe way to write such code is to give the temporary a name, which
46030forces it to remain until the end of the scope of the name.  For
46031example:
46032
46033     const string& tmp = strfunc ();
46034     charfunc (tmp.c_str ());
46035
46036
46037File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
46038
4603911.7.4 Implicit Copy-Assignment for Virtual Bases
46040-------------------------------------------------
46041
46042When a base class is virtual, only one subobject of the base class
46043belongs to each full object.  Also, the constructors and destructors are
46044invoked only once, and called from the most-derived class.  However,
46045such objects behave unspecified when being assigned.  For example:
46046
46047     struct Base{
46048       char *name;
46049       Base(char *n) : name(strdup(n)){}
46050       Base& operator= (const Base& other){
46051        free (name);
46052        name = strdup (other.name);
46053       }
46054     };
46055
46056     struct A:virtual Base{
46057       int val;
46058       A():Base("A"){}
46059     };
46060
46061     struct B:virtual Base{
46062       int bval;
46063       B():Base("B"){}
46064     };
46065
46066     struct Derived:public A, public B{
46067       Derived():Base("Derived"){}
46068     };
46069
46070     void func(Derived &d1, Derived &d2)
46071     {
46072       d1 = d2;
46073     }
46074
46075 The C++ standard specifies that 'Base::Base' is only called once when
46076constructing or copy-constructing a Derived object.  It is unspecified
46077whether 'Base::operator=' is called more than once when the implicit
46078copy-assignment for Derived objects is invoked (as it is inside 'func'
46079in the example).
46080
46081 G++ implements the "intuitive" algorithm for copy-assignment: assign
46082all direct bases, then assign all members.  In that algorithm, the
46083virtual base subobject can be encountered more than once.  In the
46084example, copying proceeds in the following order: 'val', 'name' (via
46085'strdup'), 'bval', and 'name' again.
46086
46087 If application code relies on copy-assignment, a user-defined
46088copy-assignment operator removes any uncertainties.  With such an
46089operator, the application can define whether and how the virtual base
46090subobject is assigned.
46091
46092
46093File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
46094
4609511.8 Certain Changes We Don't Want to Make
46096==========================================
46097
46098This section lists changes that people frequently request, but which we
46099do not make because we think GCC is better without them.
46100
46101   * Checking the number and type of arguments to a function which has
46102     an old-fashioned definition and no prototype.
46103
46104     Such a feature would work only occasionally--only for calls that
46105     appear in the same file as the called function, following the
46106     definition.  The only way to check all calls reliably is to add a
46107     prototype for the function.  But adding a prototype eliminates the
46108     motivation for this feature.  So the feature is not worthwhile.
46109
46110   * Warning about using an expression whose type is signed as a shift
46111     count.
46112
46113     Shift count operands are probably signed more often than unsigned.
46114     Warning about this would cause far more annoyance than good.
46115
46116   * Warning about assigning a signed value to an unsigned variable.
46117
46118     Such assignments must be very common; warning about them would
46119     cause more annoyance than good.
46120
46121   * Warning when a non-void function value is ignored.
46122
46123     C contains many standard functions that return a value that most
46124     programs choose to ignore.  One obvious example is 'printf'.
46125     Warning about this practice only leads the defensive programmer to
46126     clutter programs with dozens of casts to 'void'.  Such casts are
46127     required so frequently that they become visual noise.  Writing
46128     those casts becomes so automatic that they no longer convey useful
46129     information about the intentions of the programmer.  For functions
46130     where the return value should never be ignored, use the
46131     'warn_unused_result' function attribute (*note Function
46132     Attributes::).
46133
46134   * Making '-fshort-enums' the default.
46135
46136     This would cause storage layout to be incompatible with most other
46137     C compilers.  And it doesn't seem very important, given that you
46138     can get the same result in other ways.  The case where it matters
46139     most is when the enumeration-valued object is inside a structure,
46140     and in that case you can specify a field width explicitly.
46141
46142   * Making bit-fields unsigned by default on particular machines where
46143     "the ABI standard" says to do so.
46144
46145     The ISO C standard leaves it up to the implementation whether a
46146     bit-field declared plain 'int' is signed or not.  This in effect
46147     creates two alternative dialects of C.
46148
46149     The GNU C compiler supports both dialects; you can specify the
46150     signed dialect with '-fsigned-bitfields' and the unsigned dialect
46151     with '-funsigned-bitfields'.  However, this leaves open the
46152     question of which dialect to use by default.
46153
46154     Currently, the preferred dialect makes plain bit-fields signed,
46155     because this is simplest.  Since 'int' is the same as 'signed int'
46156     in every other context, it is cleanest for them to be the same in
46157     bit-fields as well.
46158
46159     Some computer manufacturers have published Application Binary
46160     Interface standards which specify that plain bit-fields should be
46161     unsigned.  It is a mistake, however, to say anything about this
46162     issue in an ABI.  This is because the handling of plain bit-fields
46163     distinguishes two dialects of C.  Both dialects are meaningful on
46164     every type of machine.  Whether a particular object file was
46165     compiled using signed bit-fields or unsigned is of no concern to
46166     other object files, even if they access the same bit-fields in the
46167     same data structures.
46168
46169     A given program is written in one or the other of these two
46170     dialects.  The program stands a chance to work on most any machine
46171     if it is compiled with the proper dialect.  It is unlikely to work
46172     at all if compiled with the wrong dialect.
46173
46174     Many users appreciate the GNU C compiler because it provides an
46175     environment that is uniform across machines.  These users would be
46176     inconvenienced if the compiler treated plain bit-fields differently
46177     on certain machines.
46178
46179     Occasionally users write programs intended only for a particular
46180     machine type.  On these occasions, the users would benefit if the
46181     GNU C compiler were to support by default the same dialect as the
46182     other compilers on that machine.  But such applications are rare.
46183     And users writing a program to run on more than one type of machine
46184     cannot possibly benefit from this kind of compatibility.
46185
46186     This is why GCC does and will treat plain bit-fields in the same
46187     fashion on all types of machines (by default).
46188
46189     There are some arguments for making bit-fields unsigned by default
46190     on all machines.  If, for example, this becomes a universal de
46191     facto standard, it would make sense for GCC to go along with it.
46192     This is something to be considered in the future.
46193
46194     (Of course, users strongly concerned about portability should
46195     indicate explicitly in each bit-field whether it is signed or not.
46196     In this way, they write programs which have the same meaning in
46197     both C dialects.)
46198
46199   * Undefining '__STDC__' when '-ansi' is not used.
46200
46201     Currently, GCC defines '__STDC__' unconditionally.  This provides
46202     good results in practice.
46203
46204     Programmers normally use conditionals on '__STDC__' to ask whether
46205     it is safe to use certain features of ISO C, such as function
46206     prototypes or ISO token concatenation.  Since plain 'gcc' supports
46207     all the features of ISO C, the correct answer to these questions is
46208     "yes".
46209
46210     Some users try to use '__STDC__' to check for the availability of
46211     certain library facilities.  This is actually incorrect usage in an
46212     ISO C program, because the ISO C standard says that a conforming
46213     freestanding implementation should define '__STDC__' even though it
46214     does not have the library facilities.  'gcc -ansi -pedantic' is a
46215     conforming freestanding implementation, and it is therefore
46216     required to define '__STDC__', even though it does not come with an
46217     ISO C library.
46218
46219     Sometimes people say that defining '__STDC__' in a compiler that
46220     does not completely conform to the ISO C standard somehow violates
46221     the standard.  This is illogical.  The standard is a standard for
46222     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
46223     other compilers such as plain 'gcc'.  Whatever the ISO C standard
46224     says is relevant to the design of plain 'gcc' without '-ansi' only
46225     for pragmatic reasons, not as a requirement.
46226
46227     GCC normally defines '__STDC__' to be 1, and in addition defines
46228     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
46229     option for strict conformance to some version of ISO C.  On some
46230     hosts, system include files use a different convention, where
46231     '__STDC__' is normally 0, but is 1 if the user specifies strict
46232     conformance to the C Standard.  GCC follows the host convention
46233     when processing system include files, but when processing user
46234     files it follows the usual GNU C convention.
46235
46236   * Undefining '__STDC__' in C++.
46237
46238     Programs written to compile with C++-to-C translators get the value
46239     of '__STDC__' that goes with the C compiler that is subsequently
46240     used.  These programs must test '__STDC__' to determine what kind
46241     of C preprocessor that compiler uses: whether they should
46242     concatenate tokens in the ISO C fashion or in the traditional
46243     fashion.
46244
46245     These programs work properly with GNU C++ if '__STDC__' is defined.
46246     They would not work otherwise.
46247
46248     In addition, many header files are written to provide prototypes in
46249     ISO C but not in traditional C.  Many of these header files can
46250     work without change in C++ provided '__STDC__' is defined.  If
46251     '__STDC__' is not defined, they will all fail, and will all need to
46252     be changed to test explicitly for C++ as well.
46253
46254   * Deleting "empty" loops.
46255
46256     Historically, GCC has not deleted "empty" loops under the
46257     assumption that the most likely reason you would put one in a
46258     program is to have a delay, so deleting them will not make real
46259     programs run any faster.
46260
46261     However, the rationale here is that optimization of a nonempty loop
46262     cannot produce an empty one.  This held for carefully written C
46263     compiled with less powerful optimizers but is not always the case
46264     for carefully written C++ or with more powerful optimizers.  Thus
46265     GCC will remove operations from loops whenever it can determine
46266     those operations are not externally visible (apart from the time
46267     taken to execute them, of course).  In case the loop can be proved
46268     to be finite, GCC will also remove the loop itself.
46269
46270     Be aware of this when performing timing tests, for instance the
46271     following loop can be completely removed, provided
46272     'some_expression' can provably not change any global state.
46273
46274          {
46275             int sum = 0;
46276             int ix;
46277
46278             for (ix = 0; ix != 10000; ix++)
46279                sum += some_expression;
46280          }
46281
46282     Even though 'sum' is accumulated in the loop, no use is made of
46283     that summation, so the accumulation can be removed.
46284
46285   * Making side effects happen in the same order as in some other
46286     compiler.
46287
46288     It is never safe to depend on the order of evaluation of side
46289     effects.  For example, a function call like this may very well
46290     behave differently from one compiler to another:
46291
46292          void func (int, int);
46293
46294          int i = 2;
46295          func (i++, i++);
46296
46297     There is no guarantee (in either the C or the C++ standard language
46298     definitions) that the increments will be evaluated in any
46299     particular order.  Either increment might happen first.  'func'
46300     might get the arguments '2, 3', or it might get '3, 2', or even '2,
46301     2'.
46302
46303   * Making certain warnings into errors by default.
46304
46305     Some ISO C testsuites report failure when the compiler does not
46306     produce an error message for a certain program.
46307
46308     ISO C requires a "diagnostic" message for certain kinds of invalid
46309     programs, but a warning is defined by GCC to count as a diagnostic.
46310     If GCC produces a warning but not an error, that is correct ISO C
46311     support.  If testsuites call this "failure", they should be run
46312     with the GCC option '-pedantic-errors', which will turn these
46313     warnings into errors.
46314
46315
46316File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
46317
4631811.9 Warning Messages and Error Messages
46319========================================
46320
46321The GNU compiler can produce two kinds of diagnostics: errors and
46322warnings.  Each kind has a different purpose:
46323
46324     "Errors" report problems that make it impossible to compile your
46325     program.  GCC reports errors with the source file name and line
46326     number where the problem is apparent.
46327
46328     "Warnings" report other unusual conditions in your code that _may_
46329     indicate a problem, although compilation can (and does) proceed.
46330     Warning messages also report the source file name and line number,
46331     but include the text 'warning:' to distinguish them from error
46332     messages.
46333
46334 Warnings may indicate danger points where you should check to make sure
46335that your program really does what you intend; or the use of obsolete
46336features; or the use of nonstandard features of GNU C or C++.  Many
46337warnings are issued only if you ask for them, with one of the '-W'
46338options (for instance, '-Wall' requests a variety of useful warnings).
46339
46340 GCC always tries to compile your program if possible; it never
46341gratuitously rejects a program whose meaning is clear merely because
46342(for instance) it fails to conform to a standard.  In some cases,
46343however, the C and C++ standards specify that certain extensions are
46344forbidden, and a diagnostic _must_ be issued by a conforming compiler.
46345The '-pedantic' option tells GCC to issue warnings in such cases;
46346'-pedantic-errors' says to make them errors instead.  This does not mean
46347that _all_ non-ISO constructs get warnings or errors.
46348
46349 *Note Options to Request or Suppress Warnings: Warning Options, for
46350more detail on these and related command-line options.
46351
46352
46353File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
46354
4635512 Reporting Bugs
46356*****************
46357
46358Your bug reports play an essential role in making GCC reliable.
46359
46360 When you encounter a problem, the first thing to do is to see if it is
46361already known.  *Note Trouble::.  If it isn't known, then you should
46362report the problem.
46363
46364* Menu:
46365
46366* Criteria:  Bug Criteria.   Have you really found a bug?
46367* Reporting: Bug Reporting.  How to report a bug effectively.
46368* Known: Trouble.            Known problems.
46369* Help: Service.             Where to ask for help.
46370
46371
46372File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
46373
4637412.1 Have You Found a Bug?
46375==========================
46376
46377If you are not sure whether you have found a bug, here are some
46378guidelines:
46379
46380   * If the compiler gets a fatal signal, for any input whatever, that
46381     is a compiler bug.  Reliable compilers never crash.
46382
46383   * If the compiler produces invalid assembly code, for any input
46384     whatever (except an 'asm' statement), that is a compiler bug,
46385     unless the compiler reports errors (not just warnings) which would
46386     ordinarily prevent the assembler from being run.
46387
46388   * If the compiler produces valid assembly code that does not
46389     correctly execute the input source code, that is a compiler bug.
46390
46391     However, you must double-check to make sure, because you may have a
46392     program whose behavior is undefined, which happened by chance to
46393     give the desired results with another C or C++ compiler.
46394
46395     For example, in many nonoptimizing compilers, you can write 'x;' at
46396     the end of a function instead of 'return x;', with the same
46397     results.  But the value of the function is undefined if 'return' is
46398     omitted; it is not a bug when GCC produces different results.
46399
46400     Problems often result from expressions with two increment
46401     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
46402     have interpreted that expression the way you intended; GCC might
46403     interpret it another way.  Neither compiler is wrong.  The bug is
46404     in your code.
46405
46406     After you have localized the error to a single source line, it
46407     should be easy to check for these things.  If your program is
46408     correct and well defined, you have found a compiler bug.
46409
46410   * If the compiler produces an error message for valid input, that is
46411     a compiler bug.
46412
46413   * If the compiler does not produce an error message for invalid
46414     input, that is a compiler bug.  However, you should note that your
46415     idea of "invalid input" might be someone else's idea of "an
46416     extension" or "support for traditional practice".
46417
46418   * If you are an experienced user of one of the languages GCC
46419     supports, your suggestions for improvement of GCC are welcome in
46420     any case.
46421
46422
46423File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
46424
4642512.2 How and where to Report Bugs
46426=================================
46427
46428Bugs should be reported to the bug database at
46429<http://gcc.gnu.org/bugs.html>.
46430
46431
46432File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
46433
4643413 How To Get Help with GCC
46435***************************
46436
46437If you need help installing, using or changing GCC, there are two ways
46438to find it:
46439
46440   * Send a message to a suitable network mailing list.  First try
46441     <[email protected]> (for help installing or using GCC), and if
46442     that brings no response, try <[email protected]>.  For help changing
46443     GCC, ask <[email protected]>.  If you think you have found a bug in
46444     GCC, please report it following the instructions at *note Bug
46445     Reporting::.
46446
46447   * Look in the service directory for someone who might help you for a
46448     fee.  The service directory is found at
46449     <http://www.fsf.org/resources/service>.
46450
46451 For further information, see <http://gcc.gnu.org/faq.html#support>.
46452
46453
46454File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
46455
4645614 Contributing to GCC Development
46457**********************************
46458
46459If you would like to help pretest GCC releases to assure they work well,
46460current development sources are available by SVN (see
46461<http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
46462available for FTP; see <http://gcc.gnu.org/snapshots.html>.
46463
46464 If you would like to work on improvements to GCC, please read the
46465advice at these URLs:
46466
46467     <http://gcc.gnu.org/contribute.html>
46468     <http://gcc.gnu.org/contributewhy.html>
46469
46470for information on how to make useful contributions and avoid
46471duplication of effort.  Suggested projects are listed at
46472<http://gcc.gnu.org/projects/>.
46473
46474
46475File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
46476
46477Funding Free Software
46478*********************
46479
46480If you want to have more free software a few years from now, it makes
46481sense for you to help encourage people to contribute funds for its
46482development.  The most effective approach known is to encourage
46483commercial redistributors to donate.
46484
46485 Users of free software systems can boost the pace of development by
46486encouraging for-a-fee distributors to donate part of their selling price
46487to free software developers--the Free Software Foundation, and others.
46488
46489 The way to convince distributors to do this is to demand it and expect
46490it from them.  So when you compare distributors, judge them partly by
46491how much they give to free software development.  Show distributors they
46492must compete to be the one who gives the most.
46493
46494 To make this approach work, you must insist on numbers that you can
46495compare, such as, "We will donate ten dollars to the Frobnitz project
46496for each disk sold."  Don't be satisfied with a vague promise, such as
46497"A portion of the profits are donated," since it doesn't give a basis
46498for comparison.
46499
46500 Even a precise fraction "of the profits from this disk" is not very
46501meaningful, since creative accounting and unrelated business decisions
46502can greatly alter what fraction of the sales price counts as profit.  If
46503the price you pay is $50, ten percent of the profit is probably less
46504than a dollar; it might be a few cents, or nothing at all.
46505
46506 Some redistributors do development work themselves.  This is useful
46507too; but to keep everyone honest, you need to inquire how much they do,
46508and what kind.  Some kinds of development make much more long-term
46509difference than others.  For example, maintaining a separate version of
46510a program contributes very little; maintaining the standard version of a
46511program for the whole community contributes much.  Easy new ports
46512contribute little, since someone else would surely do them; difficult
46513ports such as adding a new CPU to the GNU Compiler Collection contribute
46514more; major new features or packages contribute the most.
46515
46516 By establishing the idea that supporting further development is "the
46517proper thing to do" when distributing free software for a fee, we can
46518assure a steady flow of resources into making more free software.
46519
46520     Copyright (C) 1994 Free Software Foundation, Inc.
46521     Verbatim copying and redistribution of this section is permitted
46522     without royalty; alteration is not permitted.
46523
46524
46525File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
46526
46527The GNU Project and GNU/Linux
46528*****************************
46529
46530The GNU Project was launched in 1984 to develop a complete Unix-like
46531operating system which is free software: the GNU system.  (GNU is a
46532recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
46533Variants of the GNU operating system, which use the kernel Linux, are
46534now widely used; though these systems are often referred to as "Linux",
46535they are more accurately called GNU/Linux systems.
46536
46537 For more information, see:
46538     <http://www.gnu.org/>
46539     <http://www.gnu.org/gnu/linux-and-gnu.html>
46540
46541
46542File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
46543
46544GNU General Public License
46545**************************
46546
46547                        Version 3, 29 June 2007
46548
46549     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
46550
46551     Everyone is permitted to copy and distribute verbatim copies of this
46552     license document, but changing it is not allowed.
46553
46554Preamble
46555========
46556
46557The GNU General Public License is a free, copyleft license for software
46558and other kinds of works.
46559
46560 The licenses for most software and other practical works are designed
46561to take away your freedom to share and change the works.  By contrast,
46562the GNU General Public License is intended to guarantee your freedom to
46563share and change all versions of a program-to make sure it remains free
46564software for all its users.  We, the Free Software Foundation, use the
46565GNU General Public License for most of our software; it applies also to
46566any other work released this way by its authors.  You can apply it to
46567your programs, too.
46568
46569 When we speak of free software, we are referring to freedom, not price.
46570Our General Public Licenses are designed to make sure that you have the
46571freedom to distribute copies of free software (and charge for them if
46572you wish), that you receive source code or can get it if you want it,
46573that you can change the software or use pieces of it in new free
46574programs, and that you know you can do these things.
46575
46576 To protect your rights, we need to prevent others from denying you
46577these rights or asking you to surrender the rights.  Therefore, you have
46578certain responsibilities if you distribute copies of the software, or if
46579you modify it: responsibilities to respect the freedom of others.
46580
46581 For example, if you distribute copies of such a program, whether gratis
46582or for a fee, you must pass on to the recipients the same freedoms that
46583you received.  You must make sure that they, too, receive or can get the
46584source code.  And you must show them these terms so they know their
46585rights.
46586
46587 Developers that use the GNU GPL protect your rights with two steps: (1)
46588assert copyright on the software, and (2) offer you this License giving
46589you legal permission to copy, distribute and/or modify it.
46590
46591 For the developers' and authors' protection, the GPL clearly explains
46592that there is no warranty for this free software.  For both users' and
46593authors' sake, the GPL requires that modified versions be marked as
46594changed, so that their problems will not be attributed erroneously to
46595authors of previous versions.
46596
46597 Some devices are designed to deny users access to install or run
46598modified versions of the software inside them, although the manufacturer
46599can do so.  This is fundamentally incompatible with the aim of
46600protecting users' freedom to change the software.  The systematic
46601pattern of such abuse occurs in the area of products for individuals to
46602use, which is precisely where it is most unacceptable.  Therefore, we
46603have designed this version of the GPL to prohibit the practice for those
46604products.  If such problems arise substantially in other domains, we
46605stand ready to extend this provision to those domains in future versions
46606of the GPL, as needed to protect the freedom of users.
46607
46608 Finally, every program is threatened constantly by software patents.
46609States should not allow patents to restrict development and use of
46610software on general-purpose computers, but in those that do, we wish to
46611avoid the special danger that patents applied to a free program could
46612make it effectively proprietary.  To prevent this, the GPL assures that
46613patents cannot be used to render the program non-free.
46614
46615 The precise terms and conditions for copying, distribution and
46616modification follow.
46617
46618TERMS AND CONDITIONS
46619====================
46620
46621  0. Definitions.
46622
46623     "This License" refers to version 3 of the GNU General Public
46624     License.
46625
46626     "Copyright" also means copyright-like laws that apply to other
46627     kinds of works, such as semiconductor masks.
46628
46629     "The Program" refers to any copyrightable work licensed under this
46630     License.  Each licensee is addressed as "you".  "Licensees" and
46631     "recipients" may be individuals or organizations.
46632
46633     To "modify" a work means to copy from or adapt all or part of the
46634     work in a fashion requiring copyright permission, other than the
46635     making of an exact copy.  The resulting work is called a "modified
46636     version" of the earlier work or a work "based on" the earlier work.
46637
46638     A "covered work" means either the unmodified Program or a work
46639     based on the Program.
46640
46641     To "propagate" a work means to do anything with it that, without
46642     permission, would make you directly or secondarily liable for
46643     infringement under applicable copyright law, except executing it on
46644     a computer or modifying a private copy.  Propagation includes
46645     copying, distribution (with or without modification), making
46646     available to the public, and in some countries other activities as
46647     well.
46648
46649     To "convey" a work means any kind of propagation that enables other
46650     parties to make or receive copies.  Mere interaction with a user
46651     through a computer network, with no transfer of a copy, is not
46652     conveying.
46653
46654     An interactive user interface displays "Appropriate Legal Notices"
46655     to the extent that it includes a convenient and prominently visible
46656     feature that (1) displays an appropriate copyright notice, and (2)
46657     tells the user that there is no warranty for the work (except to
46658     the extent that warranties are provided), that licensees may convey
46659     the work under this License, and how to view a copy of this
46660     License.  If the interface presents a list of user commands or
46661     options, such as a menu, a prominent item in the list meets this
46662     criterion.
46663
46664  1. Source Code.
46665
46666     The "source code" for a work means the preferred form of the work
46667     for making modifications to it.  "Object code" means any non-source
46668     form of a work.
46669
46670     A "Standard Interface" means an interface that either is an
46671     official standard defined by a recognized standards body, or, in
46672     the case of interfaces specified for a particular programming
46673     language, one that is widely used among developers working in that
46674     language.
46675
46676     The "System Libraries" of an executable work include anything,
46677     other than the work as a whole, that (a) is included in the normal
46678     form of packaging a Major Component, but which is not part of that
46679     Major Component, and (b) serves only to enable use of the work with
46680     that Major Component, or to implement a Standard Interface for
46681     which an implementation is available to the public in source code
46682     form.  A "Major Component", in this context, means a major
46683     essential component (kernel, window system, and so on) of the
46684     specific operating system (if any) on which the executable work
46685     runs, or a compiler used to produce the work, or an object code
46686     interpreter used to run it.
46687
46688     The "Corresponding Source" for a work in object code form means all
46689     the source code needed to generate, install, and (for an executable
46690     work) run the object code and to modify the work, including scripts
46691     to control those activities.  However, it does not include the
46692     work's System Libraries, or general-purpose tools or generally
46693     available free programs which are used unmodified in performing
46694     those activities but which are not part of the work.  For example,
46695     Corresponding Source includes interface definition files associated
46696     with source files for the work, and the source code for shared
46697     libraries and dynamically linked subprograms that the work is
46698     specifically designed to require, such as by intimate data
46699     communication or control flow between those subprograms and other
46700     parts of the work.
46701
46702     The Corresponding Source need not include anything that users can
46703     regenerate automatically from other parts of the Corresponding
46704     Source.
46705
46706     The Corresponding Source for a work in source code form is that
46707     same work.
46708
46709  2. Basic Permissions.
46710
46711     All rights granted under this License are granted for the term of
46712     copyright on the Program, and are irrevocable provided the stated
46713     conditions are met.  This License explicitly affirms your unlimited
46714     permission to run the unmodified Program.  The output from running
46715     a covered work is covered by this License only if the output, given
46716     its content, constitutes a covered work.  This License acknowledges
46717     your rights of fair use or other equivalent, as provided by
46718     copyright law.
46719
46720     You may make, run and propagate covered works that you do not
46721     convey, without conditions so long as your license otherwise
46722     remains in force.  You may convey covered works to others for the
46723     sole purpose of having them make modifications exclusively for you,
46724     or provide you with facilities for running those works, provided
46725     that you comply with the terms of this License in conveying all
46726     material for which you do not control copyright.  Those thus making
46727     or running the covered works for you must do so exclusively on your
46728     behalf, under your direction and control, on terms that prohibit
46729     them from making any copies of your copyrighted material outside
46730     their relationship with you.
46731
46732     Conveying under any other circumstances is permitted solely under
46733     the conditions stated below.  Sublicensing is not allowed; section
46734     10 makes it unnecessary.
46735
46736  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
46737
46738     No covered work shall be deemed part of an effective technological
46739     measure under any applicable law fulfilling obligations under
46740     article 11 of the WIPO copyright treaty adopted on 20 December
46741     1996, or similar laws prohibiting or restricting circumvention of
46742     such measures.
46743
46744     When you convey a covered work, you waive any legal power to forbid
46745     circumvention of technological measures to the extent such
46746     circumvention is effected by exercising rights under this License
46747     with respect to the covered work, and you disclaim any intention to
46748     limit operation or modification of the work as a means of
46749     enforcing, against the work's users, your or third parties' legal
46750     rights to forbid circumvention of technological measures.
46751
46752  4. Conveying Verbatim Copies.
46753
46754     You may convey verbatim copies of the Program's source code as you
46755     receive it, in any medium, provided that you conspicuously and
46756     appropriately publish on each copy an appropriate copyright notice;
46757     keep intact all notices stating that this License and any
46758     non-permissive terms added in accord with section 7 apply to the
46759     code; keep intact all notices of the absence of any warranty; and
46760     give all recipients a copy of this License along with the Program.
46761
46762     You may charge any price or no price for each copy that you convey,
46763     and you may offer support or warranty protection for a fee.
46764
46765  5. Conveying Modified Source Versions.
46766
46767     You may convey a work based on the Program, or the modifications to
46768     produce it from the Program, in the form of source code under the
46769     terms of section 4, provided that you also meet all of these
46770     conditions:
46771
46772       a. The work must carry prominent notices stating that you
46773          modified it, and giving a relevant date.
46774
46775       b. The work must carry prominent notices stating that it is
46776          released under this License and any conditions added under
46777          section 7.  This requirement modifies the requirement in
46778          section 4 to "keep intact all notices".
46779
46780       c. You must license the entire work, as a whole, under this
46781          License to anyone who comes into possession of a copy.  This
46782          License will therefore apply, along with any applicable
46783          section 7 additional terms, to the whole of the work, and all
46784          its parts, regardless of how they are packaged.  This License
46785          gives no permission to license the work in any other way, but
46786          it does not invalidate such permission if you have separately
46787          received it.
46788
46789       d. If the work has interactive user interfaces, each must display
46790          Appropriate Legal Notices; however, if the Program has
46791          interactive interfaces that do not display Appropriate Legal
46792          Notices, your work need not make them do so.
46793
46794     A compilation of a covered work with other separate and independent
46795     works, which are not by their nature extensions of the covered
46796     work, and which are not combined with it such as to form a larger
46797     program, in or on a volume of a storage or distribution medium, is
46798     called an "aggregate" if the compilation and its resulting
46799     copyright are not used to limit the access or legal rights of the
46800     compilation's users beyond what the individual works permit.
46801     Inclusion of a covered work in an aggregate does not cause this
46802     License to apply to the other parts of the aggregate.
46803
46804  6. Conveying Non-Source Forms.
46805
46806     You may convey a covered work in object code form under the terms
46807     of sections 4 and 5, provided that you also convey the
46808     machine-readable Corresponding Source under the terms of this
46809     License, in one of these ways:
46810
46811       a. Convey the object code in, or embodied in, a physical product
46812          (including a physical distribution medium), accompanied by the
46813          Corresponding Source fixed on a durable physical medium
46814          customarily used for software interchange.
46815
46816       b. Convey the object code in, or embodied in, a physical product
46817          (including a physical distribution medium), accompanied by a
46818          written offer, valid for at least three years and valid for as
46819          long as you offer spare parts or customer support for that
46820          product model, to give anyone who possesses the object code
46821          either (1) a copy of the Corresponding Source for all the
46822          software in the product that is covered by this License, on a
46823          durable physical medium customarily used for software
46824          interchange, for a price no more than your reasonable cost of
46825          physically performing this conveying of source, or (2) access
46826          to copy the Corresponding Source from a network server at no
46827          charge.
46828
46829       c. Convey individual copies of the object code with a copy of the
46830          written offer to provide the Corresponding Source.  This
46831          alternative is allowed only occasionally and noncommercially,
46832          and only if you received the object code with such an offer,
46833          in accord with subsection 6b.
46834
46835       d. Convey the object code by offering access from a designated
46836          place (gratis or for a charge), and offer equivalent access to
46837          the Corresponding Source in the same way through the same
46838          place at no further charge.  You need not require recipients
46839          to copy the Corresponding Source along with the object code.
46840          If the place to copy the object code is a network server, the
46841          Corresponding Source may be on a different server (operated by
46842          you or a third party) that supports equivalent copying
46843          facilities, provided you maintain clear directions next to the
46844          object code saying where to find the Corresponding Source.
46845          Regardless of what server hosts the Corresponding Source, you
46846          remain obligated to ensure that it is available for as long as
46847          needed to satisfy these requirements.
46848
46849       e. Convey the object code using peer-to-peer transmission,
46850          provided you inform other peers where the object code and
46851          Corresponding Source of the work are being offered to the
46852          general public at no charge under subsection 6d.
46853
46854     A separable portion of the object code, whose source code is
46855     excluded from the Corresponding Source as a System Library, need
46856     not be included in conveying the object code work.
46857
46858     A "User Product" is either (1) a "consumer product", which means
46859     any tangible personal property which is normally used for personal,
46860     family, or household purposes, or (2) anything designed or sold for
46861     incorporation into a dwelling.  In determining whether a product is
46862     a consumer product, doubtful cases shall be resolved in favor of
46863     coverage.  For a particular product received by a particular user,
46864     "normally used" refers to a typical or common use of that class of
46865     product, regardless of the status of the particular user or of the
46866     way in which the particular user actually uses, or expects or is
46867     expected to use, the product.  A product is a consumer product
46868     regardless of whether the product has substantial commercial,
46869     industrial or non-consumer uses, unless such uses represent the
46870     only significant mode of use of the product.
46871
46872     "Installation Information" for a User Product means any methods,
46873     procedures, authorization keys, or other information required to
46874     install and execute modified versions of a covered work in that
46875     User Product from a modified version of its Corresponding Source.
46876     The information must suffice to ensure that the continued
46877     functioning of the modified object code is in no case prevented or
46878     interfered with solely because modification has been made.
46879
46880     If you convey an object code work under this section in, or with,
46881     or specifically for use in, a User Product, and the conveying
46882     occurs as part of a transaction in which the right of possession
46883     and use of the User Product is transferred to the recipient in
46884     perpetuity or for a fixed term (regardless of how the transaction
46885     is characterized), the Corresponding Source conveyed under this
46886     section must be accompanied by the Installation Information.  But
46887     this requirement does not apply if neither you nor any third party
46888     retains the ability to install modified object code on the User
46889     Product (for example, the work has been installed in ROM).
46890
46891     The requirement to provide Installation Information does not
46892     include a requirement to continue to provide support service,
46893     warranty, or updates for a work that has been modified or installed
46894     by the recipient, or for the User Product in which it has been
46895     modified or installed.  Access to a network may be denied when the
46896     modification itself materially and adversely affects the operation
46897     of the network or violates the rules and protocols for
46898     communication across the network.
46899
46900     Corresponding Source conveyed, and Installation Information
46901     provided, in accord with this section must be in a format that is
46902     publicly documented (and with an implementation available to the
46903     public in source code form), and must require no special password
46904     or key for unpacking, reading or copying.
46905
46906  7. Additional Terms.
46907
46908     "Additional permissions" are terms that supplement the terms of
46909     this License by making exceptions from one or more of its
46910     conditions.  Additional permissions that are applicable to the
46911     entire Program shall be treated as though they were included in
46912     this License, to the extent that they are valid under applicable
46913     law.  If additional permissions apply only to part of the Program,
46914     that part may be used separately under those permissions, but the
46915     entire Program remains governed by this License without regard to
46916     the additional permissions.
46917
46918     When you convey a copy of a covered work, you may at your option
46919     remove any additional permissions from that copy, or from any part
46920     of it.  (Additional permissions may be written to require their own
46921     removal in certain cases when you modify the work.)  You may place
46922     additional permissions on material, added by you to a covered work,
46923     for which you have or can give appropriate copyright permission.
46924
46925     Notwithstanding any other provision of this License, for material
46926     you add to a covered work, you may (if authorized by the copyright
46927     holders of that material) supplement the terms of this License with
46928     terms:
46929
46930       a. Disclaiming warranty or limiting liability differently from
46931          the terms of sections 15 and 16 of this License; or
46932
46933       b. Requiring preservation of specified reasonable legal notices
46934          or author attributions in that material or in the Appropriate
46935          Legal Notices displayed by works containing it; or
46936
46937       c. Prohibiting misrepresentation of the origin of that material,
46938          or requiring that modified versions of such material be marked
46939          in reasonable ways as different from the original version; or
46940
46941       d. Limiting the use for publicity purposes of names of licensors
46942          or authors of the material; or
46943
46944       e. Declining to grant rights under trademark law for use of some
46945          trade names, trademarks, or service marks; or
46946
46947       f. Requiring indemnification of licensors and authors of that
46948          material by anyone who conveys the material (or modified
46949          versions of it) with contractual assumptions of liability to
46950          the recipient, for any liability that these contractual
46951          assumptions directly impose on those licensors and authors.
46952
46953     All other non-permissive additional terms are considered "further
46954     restrictions" within the meaning of section 10.  If the Program as
46955     you received it, or any part of it, contains a notice stating that
46956     it is governed by this License along with a term that is a further
46957     restriction, you may remove that term.  If a license document
46958     contains a further restriction but permits relicensing or conveying
46959     under this License, you may add to a covered work material governed
46960     by the terms of that license document, provided that the further
46961     restriction does not survive such relicensing or conveying.
46962
46963     If you add terms to a covered work in accord with this section, you
46964     must place, in the relevant source files, a statement of the
46965     additional terms that apply to those files, or a notice indicating
46966     where to find the applicable terms.
46967
46968     Additional terms, permissive or non-permissive, may be stated in
46969     the form of a separately written license, or stated as exceptions;
46970     the above requirements apply either way.
46971
46972  8. Termination.
46973
46974     You may not propagate or modify a covered work except as expressly
46975     provided under this License.  Any attempt otherwise to propagate or
46976     modify it is void, and will automatically terminate your rights
46977     under this License (including any patent licenses granted under the
46978     third paragraph of section 11).
46979
46980     However, if you cease all violation of this License, then your
46981     license from a particular copyright holder is reinstated (a)
46982     provisionally, unless and until the copyright holder explicitly and
46983     finally terminates your license, and (b) permanently, if the
46984     copyright holder fails to notify you of the violation by some
46985     reasonable means prior to 60 days after the cessation.
46986
46987     Moreover, your license from a particular copyright holder is
46988     reinstated permanently if the copyright holder notifies you of the
46989     violation by some reasonable means, this is the first time you have
46990     received notice of violation of this License (for any work) from
46991     that copyright holder, and you cure the violation prior to 30 days
46992     after your receipt of the notice.
46993
46994     Termination of your rights under this section does not terminate
46995     the licenses of parties who have received copies or rights from you
46996     under this License.  If your rights have been terminated and not
46997     permanently reinstated, you do not qualify to receive new licenses
46998     for the same material under section 10.
46999
47000  9. Acceptance Not Required for Having Copies.
47001
47002     You are not required to accept this License in order to receive or
47003     run a copy of the Program.  Ancillary propagation of a covered work
47004     occurring solely as a consequence of using peer-to-peer
47005     transmission to receive a copy likewise does not require
47006     acceptance.  However, nothing other than this License grants you
47007     permission to propagate or modify any covered work.  These actions
47008     infringe copyright if you do not accept this License.  Therefore,
47009     by modifying or propagating a covered work, you indicate your
47010     acceptance of this License to do so.
47011
47012  10. Automatic Licensing of Downstream Recipients.
47013
47014     Each time you convey a covered work, the recipient automatically
47015     receives a license from the original licensors, to run, modify and
47016     propagate that work, subject to this License.  You are not
47017     responsible for enforcing compliance by third parties with this
47018     License.
47019
47020     An "entity transaction" is a transaction transferring control of an
47021     organization, or substantially all assets of one, or subdividing an
47022     organization, or merging organizations.  If propagation of a
47023     covered work results from an entity transaction, each party to that
47024     transaction who receives a copy of the work also receives whatever
47025     licenses to the work the party's predecessor in interest had or
47026     could give under the previous paragraph, plus a right to possession
47027     of the Corresponding Source of the work from the predecessor in
47028     interest, if the predecessor has it or can get it with reasonable
47029     efforts.
47030
47031     You may not impose any further restrictions on the exercise of the
47032     rights granted or affirmed under this License.  For example, you
47033     may not impose a license fee, royalty, or other charge for exercise
47034     of rights granted under this License, and you may not initiate
47035     litigation (including a cross-claim or counterclaim in a lawsuit)
47036     alleging that any patent claim is infringed by making, using,
47037     selling, offering for sale, or importing the Program or any portion
47038     of it.
47039
47040  11. Patents.
47041
47042     A "contributor" is a copyright holder who authorizes use under this
47043     License of the Program or a work on which the Program is based.
47044     The work thus licensed is called the contributor's "contributor
47045     version".
47046
47047     A contributor's "essential patent claims" are all patent claims
47048     owned or controlled by the contributor, whether already acquired or
47049     hereafter acquired, that would be infringed by some manner,
47050     permitted by this License, of making, using, or selling its
47051     contributor version, but do not include claims that would be
47052     infringed only as a consequence of further modification of the
47053     contributor version.  For purposes of this definition, "control"
47054     includes the right to grant patent sublicenses in a manner
47055     consistent with the requirements of this License.
47056
47057     Each contributor grants you a non-exclusive, worldwide,
47058     royalty-free patent license under the contributor's essential
47059     patent claims, to make, use, sell, offer for sale, import and
47060     otherwise run, modify and propagate the contents of its contributor
47061     version.
47062
47063     In the following three paragraphs, a "patent license" is any
47064     express agreement or commitment, however denominated, not to
47065     enforce a patent (such as an express permission to practice a
47066     patent or covenant not to sue for patent infringement).  To "grant"
47067     such a patent license to a party means to make such an agreement or
47068     commitment not to enforce a patent against the party.
47069
47070     If you convey a covered work, knowingly relying on a patent
47071     license, and the Corresponding Source of the work is not available
47072     for anyone to copy, free of charge and under the terms of this
47073     License, through a publicly available network server or other
47074     readily accessible means, then you must either (1) cause the
47075     Corresponding Source to be so available, or (2) arrange to deprive
47076     yourself of the benefit of the patent license for this particular
47077     work, or (3) arrange, in a manner consistent with the requirements
47078     of this License, to extend the patent license to downstream
47079     recipients.  "Knowingly relying" means you have actual knowledge
47080     that, but for the patent license, your conveying the covered work
47081     in a country, or your recipient's use of the covered work in a
47082     country, would infringe one or more identifiable patents in that
47083     country that you have reason to believe are valid.
47084
47085     If, pursuant to or in connection with a single transaction or
47086     arrangement, you convey, or propagate by procuring conveyance of, a
47087     covered work, and grant a patent license to some of the parties
47088     receiving the covered work authorizing them to use, propagate,
47089     modify or convey a specific copy of the covered work, then the
47090     patent license you grant is automatically extended to all
47091     recipients of the covered work and works based on it.
47092
47093     A patent license is "discriminatory" if it does not include within
47094     the scope of its coverage, prohibits the exercise of, or is
47095     conditioned on the non-exercise of one or more of the rights that
47096     are specifically granted under this License.  You may not convey a
47097     covered work if you are a party to an arrangement with a third
47098     party that is in the business of distributing software, under which
47099     you make payment to the third party based on the extent of your
47100     activity of conveying the work, and under which the third party
47101     grants, to any of the parties who would receive the covered work
47102     from you, a discriminatory patent license (a) in connection with
47103     copies of the covered work conveyed by you (or copies made from
47104     those copies), or (b) primarily for and in connection with specific
47105     products or compilations that contain the covered work, unless you
47106     entered into that arrangement, or that patent license was granted,
47107     prior to 28 March 2007.
47108
47109     Nothing in this License shall be construed as excluding or limiting
47110     any implied license or other defenses to infringement that may
47111     otherwise be available to you under applicable patent law.
47112
47113  12. No Surrender of Others' Freedom.
47114
47115     If conditions are imposed on you (whether by court order, agreement
47116     or otherwise) that contradict the conditions of this License, they
47117     do not excuse you from the conditions of this License.  If you
47118     cannot convey a covered work so as to satisfy simultaneously your
47119     obligations under this License and any other pertinent obligations,
47120     then as a consequence you may not convey it at all.  For example,
47121     if you agree to terms that obligate you to collect a royalty for
47122     further conveying from those to whom you convey the Program, the
47123     only way you could satisfy both those terms and this License would
47124     be to refrain entirely from conveying the Program.
47125
47126  13. Use with the GNU Affero General Public License.
47127
47128     Notwithstanding any other provision of this License, you have
47129     permission to link or combine any covered work with a work licensed
47130     under version 3 of the GNU Affero General Public License into a
47131     single combined work, and to convey the resulting work.  The terms
47132     of this License will continue to apply to the part which is the
47133     covered work, but the special requirements of the GNU Affero
47134     General Public License, section 13, concerning interaction through
47135     a network will apply to the combination as such.
47136
47137  14. Revised Versions of this License.
47138
47139     The Free Software Foundation may publish revised and/or new
47140     versions of the GNU General Public License from time to time.  Such
47141     new versions will be similar in spirit to the present version, but
47142     may differ in detail to address new problems or concerns.
47143
47144     Each version is given a distinguishing version number.  If the
47145     Program specifies that a certain numbered version of the GNU
47146     General Public License "or any later version" applies to it, you
47147     have the option of following the terms and conditions either of
47148     that numbered version or of any later version published by the Free
47149     Software Foundation.  If the Program does not specify a version
47150     number of the GNU General Public License, you may choose any
47151     version ever published by the Free Software Foundation.
47152
47153     If the Program specifies that a proxy can decide which future
47154     versions of the GNU General Public License can be used, that
47155     proxy's public statement of acceptance of a version permanently
47156     authorizes you to choose that version for the Program.
47157
47158     Later license versions may give you additional or different
47159     permissions.  However, no additional obligations are imposed on any
47160     author or copyright holder as a result of your choosing to follow a
47161     later version.
47162
47163  15. Disclaimer of Warranty.
47164
47165     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
47166     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
47167     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
47168     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
47169     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
47170     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
47171     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
47172     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
47173     NECESSARY SERVICING, REPAIR OR CORRECTION.
47174
47175  16. Limitation of Liability.
47176
47177     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
47178     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
47179     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
47180     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
47181     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
47182     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
47183     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
47184     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
47185     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
47186     THE POSSIBILITY OF SUCH DAMAGES.
47187
47188  17. Interpretation of Sections 15 and 16.
47189
47190     If the disclaimer of warranty and limitation of liability provided
47191     above cannot be given local legal effect according to their terms,
47192     reviewing courts shall apply local law that most closely
47193     approximates an absolute waiver of all civil liability in
47194     connection with the Program, unless a warranty or assumption of
47195     liability accompanies a copy of the Program in return for a fee.
47196
47197END OF TERMS AND CONDITIONS
47198===========================
47199
47200How to Apply These Terms to Your New Programs
47201=============================================
47202
47203If you develop a new program, and you want it to be of the greatest
47204possible use to the public, the best way to achieve this is to make it
47205free software which everyone can redistribute and change under these
47206terms.
47207
47208 To do so, attach the following notices to the program.  It is safest to
47209attach them to the start of each source file to most effectively state
47210the exclusion of warranty; and each file should have at least the
47211"copyright" line and a pointer to where the full notice is found.
47212
47213     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
47214     Copyright (C) YEAR NAME OF AUTHOR
47215
47216     This program is free software: you can redistribute it and/or modify
47217     it under the terms of the GNU General Public License as published by
47218     the Free Software Foundation, either version 3 of the License, or (at
47219     your option) any later version.
47220
47221     This program is distributed in the hope that it will be useful, but
47222     WITHOUT ANY WARRANTY; without even the implied warranty of
47223     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
47224     General Public License for more details.
47225
47226     You should have received a copy of the GNU General Public License
47227     along with this program.  If not, see <http://www.gnu.org/licenses/>.
47228
47229 Also add information on how to contact you by electronic and paper
47230mail.
47231
47232 If the program does terminal interaction, make it output a short notice
47233like this when it starts in an interactive mode:
47234
47235     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
47236     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
47237     This is free software, and you are welcome to redistribute it
47238     under certain conditions; type 'show c' for details.
47239
47240 The hypothetical commands 'show w' and 'show c' should show the
47241appropriate parts of the General Public License.  Of course, your
47242program's commands might be different; for a GUI interface, you would
47243use an "about box".
47244
47245 You should also get your employer (if you work as a programmer) or
47246school, if any, to sign a "copyright disclaimer" for the program, if
47247necessary.  For more information on this, and how to apply and follow
47248the GNU GPL, see <http://www.gnu.org/licenses/>.
47249
47250 The GNU General Public License does not permit incorporating your
47251program into proprietary programs.  If your program is a subroutine
47252library, you may consider it more useful to permit linking proprietary
47253applications with the library.  If this is what you want to do, use the
47254GNU Lesser General Public License instead of this License.  But first,
47255please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
47256
47257
47258File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
47259
47260GNU Free Documentation License
47261******************************
47262
47263                     Version 1.3, 3 November 2008
47264
47265     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
47266     <http://fsf.org/>
47267
47268     Everyone is permitted to copy and distribute verbatim copies
47269     of this license document, but changing it is not allowed.
47270
47271  0. PREAMBLE
47272
47273     The purpose of this License is to make a manual, textbook, or other
47274     functional and useful document "free" in the sense of freedom: to
47275     assure everyone the effective freedom to copy and redistribute it,
47276     with or without modifying it, either commercially or
47277     noncommercially.  Secondarily, this License preserves for the
47278     author and publisher a way to get credit for their work, while not
47279     being considered responsible for modifications made by others.
47280
47281     This License is a kind of "copyleft", which means that derivative
47282     works of the document must themselves be free in the same sense.
47283     It complements the GNU General Public License, which is a copyleft
47284     license designed for free software.
47285
47286     We have designed this License in order to use it for manuals for
47287     free software, because free software needs free documentation: a
47288     free program should come with manuals providing the same freedoms
47289     that the software does.  But this License is not limited to
47290     software manuals; it can be used for any textual work, regardless
47291     of subject matter or whether it is published as a printed book.  We
47292     recommend this License principally for works whose purpose is
47293     instruction or reference.
47294
47295  1. APPLICABILITY AND DEFINITIONS
47296
47297     This License applies to any manual or other work, in any medium,
47298     that contains a notice placed by the copyright holder saying it can
47299     be distributed under the terms of this License.  Such a notice
47300     grants a world-wide, royalty-free license, unlimited in duration,
47301     to use that work under the conditions stated herein.  The
47302     "Document", below, refers to any such manual or work.  Any member
47303     of the public is a licensee, and is addressed as "you".  You accept
47304     the license if you copy, modify or distribute the work in a way
47305     requiring permission under copyright law.
47306
47307     A "Modified Version" of the Document means any work containing the
47308     Document or a portion of it, either copied verbatim, or with
47309     modifications and/or translated into another language.
47310
47311     A "Secondary Section" is a named appendix or a front-matter section
47312     of the Document that deals exclusively with the relationship of the
47313     publishers or authors of the Document to the Document's overall
47314     subject (or to related matters) and contains nothing that could
47315     fall directly within that overall subject.  (Thus, if the Document
47316     is in part a textbook of mathematics, a Secondary Section may not
47317     explain any mathematics.)  The relationship could be a matter of
47318     historical connection with the subject or with related matters, or
47319     of legal, commercial, philosophical, ethical or political position
47320     regarding them.
47321
47322     The "Invariant Sections" are certain Secondary Sections whose
47323     titles are designated, as being those of Invariant Sections, in the
47324     notice that says that the Document is released under this License.
47325     If a section does not fit the above definition of Secondary then it
47326     is not allowed to be designated as Invariant.  The Document may
47327     contain zero Invariant Sections.  If the Document does not identify
47328     any Invariant Sections then there are none.
47329
47330     The "Cover Texts" are certain short passages of text that are
47331     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
47332     that says that the Document is released under this License.  A
47333     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
47334     be at most 25 words.
47335
47336     A "Transparent" copy of the Document means a machine-readable copy,
47337     represented in a format whose specification is available to the
47338     general public, that is suitable for revising the document
47339     straightforwardly with generic text editors or (for images composed
47340     of pixels) generic paint programs or (for drawings) some widely
47341     available drawing editor, and that is suitable for input to text
47342     formatters or for automatic translation to a variety of formats
47343     suitable for input to text formatters.  A copy made in an otherwise
47344     Transparent file format whose markup, or absence of markup, has
47345     been arranged to thwart or discourage subsequent modification by
47346     readers is not Transparent.  An image format is not Transparent if
47347     used for any substantial amount of text.  A copy that is not
47348     "Transparent" is called "Opaque".
47349
47350     Examples of suitable formats for Transparent copies include plain
47351     ASCII without markup, Texinfo input format, LaTeX input format,
47352     SGML or XML using a publicly available DTD, and standard-conforming
47353     simple HTML, PostScript or PDF designed for human modification.
47354     Examples of transparent image formats include PNG, XCF and JPG.
47355     Opaque formats include proprietary formats that can be read and
47356     edited only by proprietary word processors, SGML or XML for which
47357     the DTD and/or processing tools are not generally available, and
47358     the machine-generated HTML, PostScript or PDF produced by some word
47359     processors for output purposes only.
47360
47361     The "Title Page" means, for a printed book, the title page itself,
47362     plus such following pages as are needed to hold, legibly, the
47363     material this License requires to appear in the title page.  For
47364     works in formats which do not have any title page as such, "Title
47365     Page" means the text near the most prominent appearance of the
47366     work's title, preceding the beginning of the body of the text.
47367
47368     The "publisher" means any person or entity that distributes copies
47369     of the Document to the public.
47370
47371     A section "Entitled XYZ" means a named subunit of the Document
47372     whose title either is precisely XYZ or contains XYZ in parentheses
47373     following text that translates XYZ in another language.  (Here XYZ
47374     stands for a specific section name mentioned below, such as
47375     "Acknowledgements", "Dedications", "Endorsements", or "History".)
47376     To "Preserve the Title" of such a section when you modify the
47377     Document means that it remains a section "Entitled XYZ" according
47378     to this definition.
47379
47380     The Document may include Warranty Disclaimers next to the notice
47381     which states that this License applies to the Document.  These
47382     Warranty Disclaimers are considered to be included by reference in
47383     this License, but only as regards disclaiming warranties: any other
47384     implication that these Warranty Disclaimers may have is void and
47385     has no effect on the meaning of this License.
47386
47387  2. VERBATIM COPYING
47388
47389     You may copy and distribute the Document in any medium, either
47390     commercially or noncommercially, provided that this License, the
47391     copyright notices, and the license notice saying this License
47392     applies to the Document are reproduced in all copies, and that you
47393     add no other conditions whatsoever to those of this License.  You
47394     may not use technical measures to obstruct or control the reading
47395     or further copying of the copies you make or distribute.  However,
47396     you may accept compensation in exchange for copies.  If you
47397     distribute a large enough number of copies you must also follow the
47398     conditions in section 3.
47399
47400     You may also lend copies, under the same conditions stated above,
47401     and you may publicly display copies.
47402
47403  3. COPYING IN QUANTITY
47404
47405     If you publish printed copies (or copies in media that commonly
47406     have printed covers) of the Document, numbering more than 100, and
47407     the Document's license notice requires Cover Texts, you must
47408     enclose the copies in covers that carry, clearly and legibly, all
47409     these Cover Texts: Front-Cover Texts on the front cover, and
47410     Back-Cover Texts on the back cover.  Both covers must also clearly
47411     and legibly identify you as the publisher of these copies.  The
47412     front cover must present the full title with all words of the title
47413     equally prominent and visible.  You may add other material on the
47414     covers in addition.  Copying with changes limited to the covers, as
47415     long as they preserve the title of the Document and satisfy these
47416     conditions, can be treated as verbatim copying in other respects.
47417
47418     If the required texts for either cover are too voluminous to fit
47419     legibly, you should put the first ones listed (as many as fit
47420     reasonably) on the actual cover, and continue the rest onto
47421     adjacent pages.
47422
47423     If you publish or distribute Opaque copies of the Document
47424     numbering more than 100, you must either include a machine-readable
47425     Transparent copy along with each Opaque copy, or state in or with
47426     each Opaque copy a computer-network location from which the general
47427     network-using public has access to download using public-standard
47428     network protocols a complete Transparent copy of the Document, free
47429     of added material.  If you use the latter option, you must take
47430     reasonably prudent steps, when you begin distribution of Opaque
47431     copies in quantity, to ensure that this Transparent copy will
47432     remain thus accessible at the stated location until at least one
47433     year after the last time you distribute an Opaque copy (directly or
47434     through your agents or retailers) of that edition to the public.
47435
47436     It is requested, but not required, that you contact the authors of
47437     the Document well before redistributing any large number of copies,
47438     to give them a chance to provide you with an updated version of the
47439     Document.
47440
47441  4. MODIFICATIONS
47442
47443     You may copy and distribute a Modified Version of the Document
47444     under the conditions of sections 2 and 3 above, provided that you
47445     release the Modified Version under precisely this License, with the
47446     Modified Version filling the role of the Document, thus licensing
47447     distribution and modification of the Modified Version to whoever
47448     possesses a copy of it.  In addition, you must do these things in
47449     the Modified Version:
47450
47451       A. Use in the Title Page (and on the covers, if any) a title
47452          distinct from that of the Document, and from those of previous
47453          versions (which should, if there were any, be listed in the
47454          History section of the Document).  You may use the same title
47455          as a previous version if the original publisher of that
47456          version gives permission.
47457
47458       B. List on the Title Page, as authors, one or more persons or
47459          entities responsible for authorship of the modifications in
47460          the Modified Version, together with at least five of the
47461          principal authors of the Document (all of its principal
47462          authors, if it has fewer than five), unless they release you
47463          from this requirement.
47464
47465       C. State on the Title page the name of the publisher of the
47466          Modified Version, as the publisher.
47467
47468       D. Preserve all the copyright notices of the Document.
47469
47470       E. Add an appropriate copyright notice for your modifications
47471          adjacent to the other copyright notices.
47472
47473       F. Include, immediately after the copyright notices, a license
47474          notice giving the public permission to use the Modified
47475          Version under the terms of this License, in the form shown in
47476          the Addendum below.
47477
47478       G. Preserve in that license notice the full lists of Invariant
47479          Sections and required Cover Texts given in the Document's
47480          license notice.
47481
47482       H. Include an unaltered copy of this License.
47483
47484       I. Preserve the section Entitled "History", Preserve its Title,
47485          and add to it an item stating at least the title, year, new
47486          authors, and publisher of the Modified Version as given on the
47487          Title Page.  If there is no section Entitled "History" in the
47488          Document, create one stating the title, year, authors, and
47489          publisher of the Document as given on its Title Page, then add
47490          an item describing the Modified Version as stated in the
47491          previous sentence.
47492
47493       J. Preserve the network location, if any, given in the Document
47494          for public access to a Transparent copy of the Document, and
47495          likewise the network locations given in the Document for
47496          previous versions it was based on.  These may be placed in the
47497          "History" section.  You may omit a network location for a work
47498          that was published at least four years before the Document
47499          itself, or if the original publisher of the version it refers
47500          to gives permission.
47501
47502       K. For any section Entitled "Acknowledgements" or "Dedications",
47503          Preserve the Title of the section, and preserve in the section
47504          all the substance and tone of each of the contributor
47505          acknowledgements and/or dedications given therein.
47506
47507       L. Preserve all the Invariant Sections of the Document, unaltered
47508          in their text and in their titles.  Section numbers or the
47509          equivalent are not considered part of the section titles.
47510
47511       M. Delete any section Entitled "Endorsements".  Such a section
47512          may not be included in the Modified Version.
47513
47514       N. Do not retitle any existing section to be Entitled
47515          "Endorsements" or to conflict in title with any Invariant
47516          Section.
47517
47518       O. Preserve any Warranty Disclaimers.
47519
47520     If the Modified Version includes new front-matter sections or
47521     appendices that qualify as Secondary Sections and contain no
47522     material copied from the Document, you may at your option designate
47523     some or all of these sections as invariant.  To do this, add their
47524     titles to the list of Invariant Sections in the Modified Version's
47525     license notice.  These titles must be distinct from any other
47526     section titles.
47527
47528     You may add a section Entitled "Endorsements", provided it contains
47529     nothing but endorsements of your Modified Version by various
47530     parties--for example, statements of peer review or that the text
47531     has been approved by an organization as the authoritative
47532     definition of a standard.
47533
47534     You may add a passage of up to five words as a Front-Cover Text,
47535     and a passage of up to 25 words as a Back-Cover Text, to the end of
47536     the list of Cover Texts in the Modified Version.  Only one passage
47537     of Front-Cover Text and one of Back-Cover Text may be added by (or
47538     through arrangements made by) any one entity.  If the Document
47539     already includes a cover text for the same cover, previously added
47540     by you or by arrangement made by the same entity you are acting on
47541     behalf of, you may not add another; but you may replace the old
47542     one, on explicit permission from the previous publisher that added
47543     the old one.
47544
47545     The author(s) and publisher(s) of the Document do not by this
47546     License give permission to use their names for publicity for or to
47547     assert or imply endorsement of any Modified Version.
47548
47549  5. COMBINING DOCUMENTS
47550
47551     You may combine the Document with other documents released under
47552     this License, under the terms defined in section 4 above for
47553     modified versions, provided that you include in the combination all
47554     of the Invariant Sections of all of the original documents,
47555     unmodified, and list them all as Invariant Sections of your
47556     combined work in its license notice, and that you preserve all
47557     their Warranty Disclaimers.
47558
47559     The combined work need only contain one copy of this License, and
47560     multiple identical Invariant Sections may be replaced with a single
47561     copy.  If there are multiple Invariant Sections with the same name
47562     but different contents, make the title of each such section unique
47563     by adding at the end of it, in parentheses, the name of the
47564     original author or publisher of that section if known, or else a
47565     unique number.  Make the same adjustment to the section titles in
47566     the list of Invariant Sections in the license notice of the
47567     combined work.
47568
47569     In the combination, you must combine any sections Entitled
47570     "History" in the various original documents, forming one section
47571     Entitled "History"; likewise combine any sections Entitled
47572     "Acknowledgements", and any sections Entitled "Dedications".  You
47573     must delete all sections Entitled "Endorsements."
47574
47575  6. COLLECTIONS OF DOCUMENTS
47576
47577     You may make a collection consisting of the Document and other
47578     documents released under this License, and replace the individual
47579     copies of this License in the various documents with a single copy
47580     that is included in the collection, provided that you follow the
47581     rules of this License for verbatim copying of each of the documents
47582     in all other respects.
47583
47584     You may extract a single document from such a collection, and
47585     distribute it individually under this License, provided you insert
47586     a copy of this License into the extracted document, and follow this
47587     License in all other respects regarding verbatim copying of that
47588     document.
47589
47590  7. AGGREGATION WITH INDEPENDENT WORKS
47591
47592     A compilation of the Document or its derivatives with other
47593     separate and independent documents or works, in or on a volume of a
47594     storage or distribution medium, is called an "aggregate" if the
47595     copyright resulting from the compilation is not used to limit the
47596     legal rights of the compilation's users beyond what the individual
47597     works permit.  When the Document is included in an aggregate, this
47598     License does not apply to the other works in the aggregate which
47599     are not themselves derivative works of the Document.
47600
47601     If the Cover Text requirement of section 3 is applicable to these
47602     copies of the Document, then if the Document is less than one half
47603     of the entire aggregate, the Document's Cover Texts may be placed
47604     on covers that bracket the Document within the aggregate, or the
47605     electronic equivalent of covers if the Document is in electronic
47606     form.  Otherwise they must appear on printed covers that bracket
47607     the whole aggregate.
47608
47609  8. TRANSLATION
47610
47611     Translation is considered a kind of modification, so you may
47612     distribute translations of the Document under the terms of section
47613     4.  Replacing Invariant Sections with translations requires special
47614     permission from their copyright holders, but you may include
47615     translations of some or all Invariant Sections in addition to the
47616     original versions of these Invariant Sections.  You may include a
47617     translation of this License, and all the license notices in the
47618     Document, and any Warranty Disclaimers, provided that you also
47619     include the original English version of this License and the
47620     original versions of those notices and disclaimers.  In case of a
47621     disagreement between the translation and the original version of
47622     this License or a notice or disclaimer, the original version will
47623     prevail.
47624
47625     If a section in the Document is Entitled "Acknowledgements",
47626     "Dedications", or "History", the requirement (section 4) to
47627     Preserve its Title (section 1) will typically require changing the
47628     actual title.
47629
47630  9. TERMINATION
47631
47632     You may not copy, modify, sublicense, or distribute the Document
47633     except as expressly provided under this License.  Any attempt
47634     otherwise to copy, modify, sublicense, or distribute it is void,
47635     and will automatically terminate your rights under this License.
47636
47637     However, if you cease all violation of this License, then your
47638     license from a particular copyright holder is reinstated (a)
47639     provisionally, unless and until the copyright holder explicitly and
47640     finally terminates your license, and (b) permanently, if the
47641     copyright holder fails to notify you of the violation by some
47642     reasonable means prior to 60 days after the cessation.
47643
47644     Moreover, your license from a particular copyright holder is
47645     reinstated permanently if the copyright holder notifies you of the
47646     violation by some reasonable means, this is the first time you have
47647     received notice of violation of this License (for any work) from
47648     that copyright holder, and you cure the violation prior to 30 days
47649     after your receipt of the notice.
47650
47651     Termination of your rights under this section does not terminate
47652     the licenses of parties who have received copies or rights from you
47653     under this License.  If your rights have been terminated and not
47654     permanently reinstated, receipt of a copy of some or all of the
47655     same material does not give you any rights to use it.
47656
47657  10. FUTURE REVISIONS OF THIS LICENSE
47658
47659     The Free Software Foundation may publish new, revised versions of
47660     the GNU Free Documentation License from time to time.  Such new
47661     versions will be similar in spirit to the present version, but may
47662     differ in detail to address new problems or concerns.  See
47663     <http://www.gnu.org/copyleft/>.
47664
47665     Each version of the License is given a distinguishing version
47666     number.  If the Document specifies that a particular numbered
47667     version of this License "or any later version" applies to it, you
47668     have the option of following the terms and conditions either of
47669     that specified version or of any later version that has been
47670     published (not as a draft) by the Free Software Foundation.  If the
47671     Document does not specify a version number of this License, you may
47672     choose any version ever published (not as a draft) by the Free
47673     Software Foundation.  If the Document specifies that a proxy can
47674     decide which future versions of this License can be used, that
47675     proxy's public statement of acceptance of a version permanently
47676     authorizes you to choose that version for the Document.
47677
47678  11. RELICENSING
47679
47680     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
47681     World Wide Web server that publishes copyrightable works and also
47682     provides prominent facilities for anybody to edit those works.  A
47683     public wiki that anybody can edit is an example of such a server.
47684     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
47685     site means any set of copyrightable works thus published on the MMC
47686     site.
47687
47688     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
47689     license published by Creative Commons Corporation, a not-for-profit
47690     corporation with a principal place of business in San Francisco,
47691     California, as well as future copyleft versions of that license
47692     published by that same organization.
47693
47694     "Incorporate" means to publish or republish a Document, in whole or
47695     in part, as part of another Document.
47696
47697     An MMC is "eligible for relicensing" if it is licensed under this
47698     License, and if all works that were first published under this
47699     License somewhere other than this MMC, and subsequently
47700     incorporated in whole or in part into the MMC, (1) had no cover
47701     texts or invariant sections, and (2) were thus incorporated prior
47702     to November 1, 2008.
47703
47704     The operator of an MMC Site may republish an MMC contained in the
47705     site under CC-BY-SA on the same site at any time before August 1,
47706     2009, provided the MMC is eligible for relicensing.
47707
47708ADDENDUM: How to use this License for your documents
47709====================================================
47710
47711To use this License in a document you have written, include a copy of
47712the License in the document and put the following copyright and license
47713notices just after the title page:
47714
47715       Copyright (C)  YEAR  YOUR NAME.
47716       Permission is granted to copy, distribute and/or modify this document
47717       under the terms of the GNU Free Documentation License, Version 1.3
47718       or any later version published by the Free Software Foundation;
47719       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
47720       Texts.  A copy of the license is included in the section entitled ``GNU
47721       Free Documentation License''.
47722
47723 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47724replace the "with...Texts."  line with this:
47725
47726         with the Invariant Sections being LIST THEIR TITLES, with
47727         the Front-Cover Texts being LIST, and with the Back-Cover Texts
47728         being LIST.
47729
47730 If you have Invariant Sections without Cover Texts, or some other
47731combination of the three, merge those two alternatives to suit the
47732situation.
47733
47734 If your document contains nontrivial examples of program code, we
47735recommend releasing these examples in parallel under your choice of free
47736software license, such as the GNU General Public License, to permit
47737their use in free software.
47738
47739
47740File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
47741
47742Contributors to GCC
47743*******************
47744
47745The GCC project would like to thank its many contributors.  Without them
47746the project would not have been nearly as successful as it has been.
47747Any omissions in this list are accidental.  Feel free to contact
47748<[email protected]> or <[email protected]> if you have been left out or
47749some of your contributions are not listed.  Please keep this list in
47750alphabetical order.
47751
47752   * Analog Devices helped implement the support for complex data types
47753     and iterators.
47754
47755   * John David Anglin for threading-related fixes and improvements to
47756     libstdc++-v3, and the HP-UX port.
47757
47758   * James van Artsdalen wrote the code that makes efficient use of the
47759     Intel 80387 register stack.
47760
47761   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47762     Series port.
47763
47764   * Alasdair Baird for various bug fixes.
47765
47766   * Giovanni Bajo for analyzing lots of complicated C++ problem
47767     reports.
47768
47769   * Peter Barada for his work to improve code generation for new
47770     ColdFire cores.
47771
47772   * Gerald Baumgartner added the signature extension to the C++ front
47773     end.
47774
47775   * Godmar Back for his Java improvements and encouragement.
47776
47777   * Scott Bambrough for help porting the Java compiler.
47778
47779   * Wolfgang Bangerth for processing tons of bug reports.
47780
47781   * Jon Beniston for his Microsoft Windows port of Java and port to
47782     Lattice Mico32.
47783
47784   * Daniel Berlin for better DWARF2 support, faster/better
47785     optimizations, improved alias analysis, plus migrating GCC to
47786     Bugzilla.
47787
47788   * Geoff Berry for his Java object serialization work and various
47789     patches.
47790
47791   * David Binderman tests weekly snapshots of GCC trunk against Fedora
47792     Rawhide for several architectures.
47793
47794   * Uros Bizjak for the implementation of x87 math built-in functions
47795     and for various middle end and i386 back end improvements and bug
47796     fixes.
47797
47798   * Eric Blake for helping to make GCJ and libgcj conform to the
47799     specifications.
47800
47801   * Janne Blomqvist for contributions to GNU Fortran.
47802
47803   * Segher Boessenkool for various fixes.
47804
47805   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47806     other Java work.
47807
47808   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47809     miscellaneous clean-ups.
47810
47811   * Steven Bosscher for integrating the GNU Fortran front end into GCC
47812     and for contributing to the tree-ssa branch.
47813
47814   * Eric Botcazou for fixing middle- and backend bugs left and right.
47815
47816   * Per Bothner for his direction via the steering committee and
47817     various improvements to the infrastructure for supporting new
47818     languages.  Chill front end implementation.  Initial
47819     implementations of cpplib, fix-header, config.guess, libio, and
47820     past C++ library (libg++) maintainer.  Dreaming up, designing and
47821     implementing much of GCJ.
47822
47823   * Devon Bowen helped port GCC to the Tahoe.
47824
47825   * Don Bowman for mips-vxworks contributions.
47826
47827   * Dave Brolley for work on cpplib and Chill.
47828
47829   * Paul Brook for work on the ARM architecture and maintaining GNU
47830     Fortran.
47831
47832   * Robert Brown implemented the support for Encore 32000 systems.
47833
47834   * Christian Bruel for improvements to local store elimination.
47835
47836   * Herman A.J. ten Brugge for various fixes.
47837
47838   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47839     FAQ.
47840
47841   * Joe Buck for his direction via the steering committee.
47842
47843   * Craig Burley for leadership of the G77 Fortran effort.
47844
47845   * Stephan Buys for contributing Doxygen notes for libstdc++.
47846
47847   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
47848     to the C++ strings, streambufs and formatted I/O, hard detective
47849     work on the frustrating localization issues, and keeping up with
47850     the problem reports.
47851
47852   * John Carr for his alias work, SPARC hacking, infrastructure
47853     improvements, previous contributions to the steering committee,
47854     loop optimizations, etc.
47855
47856   * Stephane Carrez for 68HC11 and 68HC12 ports.
47857
47858   * Steve Chamberlain for support for the Renesas SH and H8 processors
47859     and the PicoJava processor, and for GCJ config fixes.
47860
47861   * Glenn Chambers for help with the GCJ FAQ.
47862
47863   * John-Marc Chandonia for various libgcj patches.
47864
47865   * Denis Chertykov for contributing and maintaining the AVR port, the
47866     first GCC port for an 8-bit architecture.
47867
47868   * Scott Christley for his Objective-C contributions.
47869
47870   * Eric Christopher for his Java porting help and clean-ups.
47871
47872   * Branko Cibej for more warning contributions.
47873
47874   * The GNU Classpath project for all of their merged runtime code.
47875
47876   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, '--help',
47877     and other random hacking.
47878
47879   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47880
47881   * R. Kelley Cook for making GCC buildable from a read-only directory
47882     as well as other miscellaneous build process and documentation
47883     clean-ups.
47884
47885   * Ralf Corsepius for SH testing and minor bug fixing.
47886
47887   * Stan Cox for care and feeding of the x86 port and lots of behind
47888     the scenes hacking.
47889
47890   * Alex Crain provided changes for the 3b1.
47891
47892   * Ian Dall for major improvements to the NS32k port.
47893
47894   * Paul Dale for his work to add uClinux platform support to the m68k
47895     backend.
47896
47897   * Dario Dariol contributed the four varieties of sample programs that
47898     print a copy of their source.
47899
47900   * Russell Davidson for fstream and stringstream fixes in libstdc++.
47901
47902   * Bud Davis for work on the G77 and GNU Fortran compilers.
47903
47904   * Mo DeJong for GCJ and libgcj bug fixes.
47905
47906   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47907     various bug fixes, and the M32C, MeP, and RL78 ports.
47908
47909   * Arnaud Desitter for helping to debug GNU Fortran.
47910
47911   * Gabriel Dos Reis for contributions to G++, contributions and
47912     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
47913     including 'valarray<>', 'complex<>', maintaining the numerics
47914     library (including that pesky '<limits>' :-) and keeping up-to-date
47915     anything to do with numbers.
47916
47917   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
47918     ISO C99 support, CFG dumping support, etc., plus support of the C++
47919     runtime libraries including for all kinds of C interface issues,
47920     contributing and maintaining 'complex<>', sanity checking and
47921     disbursement, configuration architecture, libio maintenance, and
47922     early math work.
47923
47924   * Zdenek Dvorak for a new loop unroller and various fixes.
47925
47926   * Michael Eager for his work on the Xilinx MicroBlaze port.
47927
47928   * Richard Earnshaw for his ongoing work with the ARM.
47929
47930   * David Edelsohn for his direction via the steering committee,
47931     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
47932     loop changes, doing the entire AIX port of libstdc++ with his bare
47933     hands, and for ensuring GCC properly keeps working on AIX.
47934
47935   * Kevin Ediger for the floating point formatting of num_put::do_put
47936     in libstdc++.
47937
47938   * Phil Edwards for libstdc++ work including configuration hackery,
47939     documentation maintainer, chief breaker of the web pages, the
47940     occasional iostream bug fix, and work on shared library symbol
47941     versioning.
47942
47943   * Paul Eggert for random hacking all over GCC.
47944
47945   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47946     configuration support for locales and fstream-related fixes.
47947
47948   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47949     iostreams.
47950
47951   * Christian Ehrhardt for dealing with bug reports.
47952
47953   * Ben Elliston for his work to move the Objective-C runtime into its
47954     own subdirectory and for his work on autoconf.
47955
47956   * Revital Eres for work on the PowerPC 750CL port.
47957
47958   * Marc Espie for OpenBSD support.
47959
47960   * Doug Evans for much of the global optimization framework, arc,
47961     m32r, and SPARC work.
47962
47963   * Christopher Faylor for his work on the Cygwin port and for caring
47964     and feeding the gcc.gnu.org box and saving its users tons of spam.
47965
47966   * Fred Fish for BeOS support and Ada fixes.
47967
47968   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47969
47970   * Peter Gerwinski for various bug fixes and the Pascal front end.
47971
47972   * Kaveh R. Ghazi for his direction via the steering committee,
47973     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
47974     on a plethora of platforms.  Kaveh extends his gratitude to the
47975     CAIP Center at Rutgers University for providing him with computing
47976     resources to work on Free Software from the late 1980s to 2010.
47977
47978   * John Gilmore for a donation to the FSF earmarked improving GNU
47979     Java.
47980
47981   * Judy Goldberg for c++ contributions.
47982
47983   * Torbjorn Granlund for various fixes and the c-torture testsuite,
47984     multiply- and divide-by-constant optimization, improved long long
47985     support, improved leaf function register allocation, and his
47986     direction via the steering committee.
47987
47988   * Anthony Green for his '-Os' contributions, the moxie port, and Java
47989     front end work.
47990
47991   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
47992     code.
47993
47994   * Michael K. Gschwind contributed the port to the PDP-11.
47995
47996   * Richard Guenther for his ongoing middle-end contributions and bug
47997     fixes and for release management.
47998
47999   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
48000     the support for Dwarf symbolic debugging information, and much of
48001     the support for System V Release 4.  He has also worked heavily on
48002     the Intel 386 and 860 support.
48003
48004   * Sumanth Gundapaneni for contributing the CR16 port.
48005
48006   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
48007     GCSE.
48008
48009   * Bruno Haible for improvements in the runtime overhead for EH, new
48010     warnings and assorted bug fixes.
48011
48012   * Andrew Haley for his amazing Java compiler and library efforts.
48013
48014   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
48015     series 300.
48016
48017   * Michael Hayes for various thankless work he's done trying to get
48018     the c30/c40 ports functional.  Lots of loop and unroll improvements
48019     and fixes.
48020
48021   * Dara Hazeghi for wading through myriads of target-specific bug
48022     reports.
48023
48024   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
48025
48026   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
48027     work, loop opts, and generally fixing lots of old problems we've
48028     ignored for years, flow rewrite and lots of further stuff,
48029     including reviewing tons of patches.
48030
48031   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
48032     various fixes.
48033
48034   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
48035     contributed the support for the Sony NEWS machine.
48036
48037   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
48038     various fixes.
48039
48040   * Katherine Holcomb for work on GNU Fortran.
48041
48042   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
48043     of testing and bug fixing, particularly of GCC configury code.
48044
48045   * Steve Holmgren for MachTen patches.
48046
48047   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
48048
48049   * Jan Hubicka for his x86 port improvements.
48050
48051   * Falk Hueffner for working on C and optimization bug reports.
48052
48053   * Bernardo Innocenti for his m68k work, including merging of ColdFire
48054     improvements and uClinux support.
48055
48056   * Christian Iseli for various bug fixes.
48057
48058   * Kamil Iskra for general m68k hacking.
48059
48060   * Lee Iverson for random fixes and MIPS testing.
48061
48062   * Andreas Jaeger for testing and benchmarking of GCC and various bug
48063     fixes.
48064
48065   * Jakub Jelinek for his SPARC work and sibling call optimizations as
48066     well as lots of bug fixes and test cases, and for improving the
48067     Java build system.
48068
48069   * Janis Johnson for ia64 testing and fixes, her quality improvement
48070     sidetracks, and web page maintenance.
48071
48072   * Kean Johnston for SCO OpenServer support and various fixes.
48073
48074   * Tim Josling for the sample language treelang based originally on
48075     Richard Kenner's "toy" language.
48076
48077   * Nicolai Josuttis for additional libstdc++ documentation.
48078
48079   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
48080     target.
48081
48082   * Steven G. Kargl for work on GNU Fortran.
48083
48084   * David Kashtan of SRI adapted GCC to VMS.
48085
48086   * Ryszard Kabatek for many, many libstdc++ bug fixes and
48087     optimizations of strings, especially member functions, and for
48088     auto_ptr fixes.
48089
48090   * Geoffrey Keating for his ongoing work to make the PPC work for
48091     GNU/Linux and his automatic regression tester.
48092
48093   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
48094     work in just about every part of libstdc++.
48095
48096   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
48097     MIL-STD-1750A.
48098
48099   * Richard Kenner of the New York University Ultracomputer Research
48100     Laboratory wrote the machine descriptions for the AMD 29000, the
48101     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
48102     support for instruction attributes.  He also made changes to better
48103     support RISC processors including changes to common subexpression
48104     elimination, strength reduction, function calling sequence
48105     handling, and condition code support, in addition to generalizing
48106     the code for frame pointer elimination and delay slot scheduling.
48107     Richard Kenner was also the head maintainer of GCC for several
48108     years.
48109
48110   * Mumit Khan for various contributions to the Cygwin and Mingw32
48111     ports and maintaining binary releases for Microsoft Windows hosts,
48112     and for massive libstdc++ porting work to Cygwin/Mingw32.
48113
48114   * Robin Kirkham for cpu32 support.
48115
48116   * Mark Klein for PA improvements.
48117
48118   * Thomas Koenig for various bug fixes.
48119
48120   * Bruce Korb for the new and improved fixincludes code.
48121
48122   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
48123     effort.
48124
48125   * Charles LaBrec contributed the support for the Integrated Solutions
48126     68020 system.
48127
48128   * Asher Langton and Mike Kumbera for contributing Cray pointer
48129     support to GNU Fortran, and for other GNU Fortran improvements.
48130
48131   * Jeff Law for his direction via the steering committee, coordinating
48132     the entire egcs project and GCC 2.95, rolling out snapshots and
48133     releases, handling merges from GCC2, reviewing tons of patches that
48134     might have fallen through the cracks else, and random but extensive
48135     hacking.
48136
48137   * Walter Lee for work on the TILE-Gx and TILEPro ports.
48138
48139   * Marc Lehmann for his direction via the steering committee and
48140     helping with analysis and improvements of x86 performance.
48141
48142   * Victor Leikehman for work on GNU Fortran.
48143
48144   * Ted Lemon wrote parts of the RTL reader and printer.
48145
48146   * Kriang Lerdsuwanakij for C++ improvements including template as
48147     template parameter support, and many C++ fixes.
48148
48149   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
48150     and random work on the Java front end.
48151
48152   * Alain Lichnewsky ported GCC to the MIPS CPU.
48153
48154   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
48155     and patches.
48156
48157   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
48158
48159   * Chen Liqin for various S+core related fixes/improvement, and for
48160     maintaining the S+core port.
48161
48162   * Weiwen Liu for testing and various bug fixes.
48163
48164   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
48165     diagnostics fixes and improvements.
48166
48167   * Dave Love for his ongoing work with the Fortran front end and
48168     runtime libraries.
48169
48170   * Martin von Lo"wis for internal consistency checking infrastructure,
48171     various C++ improvements including namespace support, and tons of
48172     assistance with libstdc++/compiler merges.
48173
48174   * H.J. Lu for his previous contributions to the steering committee,
48175     many x86 bug reports, prototype patches, and keeping the GNU/Linux
48176     ports working.
48177
48178   * Greg McGary for random fixes and (someday) bounded pointers.
48179
48180   * Andrew MacLeod for his ongoing work in building a real EH system,
48181     various code generation improvements, work on the global optimizer,
48182     etc.
48183
48184   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
48185     hacking improvements to compile-time performance, overall knowledge
48186     and direction in the area of instruction scheduling, and design and
48187     implementation of the automaton based instruction scheduler.
48188
48189   * Bob Manson for his behind the scenes work on dejagnu.
48190
48191   * Philip Martin for lots of libstdc++ string and vector iterator
48192     fixes and improvements, and string clean up and testsuites.
48193
48194   * All of the Mauve project contributors, for Java test code.
48195
48196   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
48197
48198   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
48199
48200   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
48201     powerpc, haifa, ECOFF debug support, and other assorted hacking.
48202
48203   * Jason Merrill for his direction via the steering committee and
48204     leading the G++ effort.
48205
48206   * Martin Michlmayr for testing GCC on several architectures using the
48207     entire Debian archive.
48208
48209   * David Miller for his direction via the steering committee, lots of
48210     SPARC work, improvements in jump.c and interfacing with the Linux
48211     kernel developers.
48212
48213   * Gary Miller ported GCC to Charles River Data Systems machines.
48214
48215   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
48216     the entire libstdc++ testsuite namespace-compatible.
48217
48218   * Mark Mitchell for his direction via the steering committee,
48219     mountains of C++ work, load/store hoisting out of loops, alias
48220     analysis improvements, ISO C 'restrict' support, and serving as
48221     release manager from 2000 to 2011.
48222
48223   * Alan Modra for various GNU/Linux bits and testing.
48224
48225   * Toon Moene for his direction via the steering committee, Fortran
48226     maintenance, and his ongoing work to make us make Fortran run fast.
48227
48228   * Jason Molenda for major help in the care and feeding of all the
48229     services on the gcc.gnu.org (formerly egcs.cygnus.com)
48230     machine--mail, web services, ftp services, etc etc.  Doing all this
48231     work on scrap paper and the backs of envelopes would have been...
48232     difficult.
48233
48234   * Catherine Moore for fixing various ugly problems we have sent her
48235     way, including the haifa bug which was killing the Alpha & PowerPC
48236     Linux kernels.
48237
48238   * Mike Moreton for his various Java patches.
48239
48240   * David Mosberger-Tang for various Alpha improvements, and for the
48241     initial IA-64 port.
48242
48243   * Stephen Moshier contributed the floating point emulator that
48244     assists in cross-compilation and permits support for floating point
48245     numbers wider than 64 bits and for ISO C99 support.
48246
48247   * Bill Moyer for his behind the scenes work on various issues.
48248
48249   * Philippe De Muyter for his work on the m68k port.
48250
48251   * Joseph S. Myers for his work on the PDP-11 port, format checking
48252     and ISO C99 support, and continuous emphasis on (and contributions
48253     to) documentation.
48254
48255   * Nathan Myers for his work on libstdc++-v3: architecture and
48256     authorship through the first three snapshots, including
48257     implementation of locale infrastructure, string, shadow C headers,
48258     and the initial project documentation (DESIGN, CHECKLIST, and so
48259     forth).  Later, more work on MT-safe string and shadow headers.
48260
48261   * Felix Natter for documentation on porting libstdc++.
48262
48263   * Nathanael Nerode for cleaning up the configuration/build process.
48264
48265   * NeXT, Inc. donated the front end that supports the Objective-C
48266     language.
48267
48268   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
48269     search engine setup, various documentation fixes and other small
48270     fixes.
48271
48272   * Geoff Noer for his work on getting cygwin native builds working.
48273
48274   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
48275     tracking web pages, GIMPLE tuples, and assorted fixes.
48276
48277   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
48278     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
48279     infrastructure improvements.
48280
48281   * Alexandre Oliva for various build infrastructure improvements,
48282     scripts and amazing testing work, including keeping libtool issues
48283     sane and happy.
48284
48285   * Stefan Olsson for work on mt_alloc.
48286
48287   * Melissa O'Neill for various NeXT fixes.
48288
48289   * Rainer Orth for random MIPS work, including improvements to GCC's
48290     o32 ABI support, improvements to dejagnu's MIPS support, Java
48291     configuration clean-ups and porting work, and maintaining the IRIX,
48292     Solaris 2, and Tru64 UNIX ports.
48293
48294   * Hartmut Penner for work on the s390 port.
48295
48296   * Paul Petersen wrote the machine description for the Alliant FX/8.
48297
48298   * Alexandre Petit-Bianco for implementing much of the Java compiler
48299     and continued Java maintainership.
48300
48301   * Matthias Pfaller for major improvements to the NS32k port.
48302
48303   * Gerald Pfeifer for his direction via the steering committee,
48304     pointing out lots of problems we need to solve, maintenance of the
48305     web pages, and taking care of documentation maintenance in general.
48306
48307   * Andrew Pinski for processing bug reports by the dozen.
48308
48309   * Ovidiu Predescu for his work on the Objective-C front end and
48310     runtime libraries.
48311
48312   * Jerry Quinn for major performance improvements in C++ formatted
48313     I/O.
48314
48315   * Ken Raeburn for various improvements to checker, MIPS ports and
48316     various cleanups in the compiler.
48317
48318   * Rolf W. Rasmussen for hacking on AWT.
48319
48320   * David Reese of Sun Microsystems contributed to the Solaris on
48321     PowerPC port.
48322
48323   * Volker Reichelt for keeping up with the problem reports.
48324
48325   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
48326     hacking and developing and maintaining the Epiphany port.
48327
48328   * Loren J. Rittle for improvements to libstdc++-v3 including the
48329     FreeBSD port, threading fixes, thread-related configury changes,
48330     critical threading documentation, and solutions to really tricky
48331     I/O problems, as well as keeping GCC properly working on FreeBSD
48332     and continuous testing.
48333
48334   * Craig Rodrigues for processing tons of bug reports.
48335
48336   * Ola Ro"nnerup for work on mt_alloc.
48337
48338   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
48339
48340   * David Ronis inspired and encouraged Craig to rewrite the G77
48341     documentation in texinfo format by contributing a first pass at a
48342     translation of the old 'g77-0.5.16/f/DOC' file.
48343
48344   * Ken Rose for fixes to GCC's delay slot filling code.
48345
48346   * Paul Rubin wrote most of the preprocessor.
48347
48348   * Pe'tur Runo'lfsson for major performance improvements in C++
48349     formatted I/O and large file support in C++ filebuf.
48350
48351   * Chip Salzenberg for libstdc++ patches and improvements to locales,
48352     traits, Makefiles, libio, libtool hackery, and "long long" support.
48353
48354   * Juha Sarlin for improvements to the H8 code generator.
48355
48356   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
48357     300.
48358
48359   * Roger Sayle for improvements to constant folding and GCC's RTL
48360     optimizers as well as for fixing numerous bugs.
48361
48362   * Bradley Schatz for his work on the GCJ FAQ.
48363
48364   * Peter Schauer wrote the code to allow debugging to work on the
48365     Alpha.
48366
48367   * William Schelter did most of the work on the Intel 80386 support.
48368
48369   * Tobias Schlu"ter for work on GNU Fortran.
48370
48371   * Bernd Schmidt for various code generation improvements and major
48372     work in the reload pass, serving as release manager for GCC 2.95.3,
48373     and work on the Blackfin and C6X ports.
48374
48375   * Peter Schmid for constant testing of libstdc++--especially
48376     application testing, going above and beyond what was requested for
48377     the release criteria--and libstdc++ header file tweaks.
48378
48379   * Jason Schroeder for jcf-dump patches.
48380
48381   * Andreas Schwab for his work on the m68k port.
48382
48383   * Lars Segerlund for work on GNU Fortran.
48384
48385   * Dodji Seketeli for numerous C++ bug fixes and debug info
48386     improvements.
48387
48388   * Joel Sherrill for his direction via the steering committee, RTEMS
48389     contributions and RTEMS testing.
48390
48391   * Nathan Sidwell for many C++ fixes/improvements.
48392
48393   * Jeffrey Siegal for helping RMS with the original design of GCC,
48394     some code which handles the parse tree and RTL data structures,
48395     constant folding and help with the original VAX & m68k ports.
48396
48397   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
48398     from the LWG (thereby keeping GCC in line with updates from the
48399     ISO).
48400
48401   * Franz Sirl for his ongoing work with making the PPC port stable for
48402     GNU/Linux.
48403
48404   * Andrey Slepuhin for assorted AIX hacking.
48405
48406   * Trevor Smigiel for contributing the SPU port.
48407
48408   * Christopher Smith did the port for Convex machines.
48409
48410   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
48411
48412   * Randy Smith finished the Sun FPA support.
48413
48414   * Scott Snyder for queue, iterator, istream, and string fixes and
48415     libstdc++ testsuite entries.  Also for providing the patch to G77
48416     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
48417     'LOGICAL*1'.
48418
48419   * Zdenek Sojka for running automated regression testing of GCC and
48420     reporting numerous bugs.
48421
48422   * Jayant Sonar for contributing the CR16 port.
48423
48424   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
48425
48426   * Richard Stallman, for writing the original GCC and launching the
48427     GNU project.
48428
48429   * Jan Stein of the Chalmers Computer Society provided support for
48430     Genix, as well as part of the 32000 machine description.
48431
48432   * Nigel Stephens for various mips16 related fixes/improvements.
48433
48434   * Jonathan Stone wrote the machine description for the Pyramid
48435     computer.
48436
48437   * Graham Stott for various infrastructure improvements.
48438
48439   * John Stracke for his Java HTTP protocol fixes.
48440
48441   * Mike Stump for his Elxsi port, G++ contributions over the years and
48442     more recently his vxworks contributions
48443
48444   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
48445
48446   * Shigeya Suzuki for this fixes for the bsdi platforms.
48447
48448   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
48449     support, general configury hacking, fixincludes, etc.
48450
48451   * Holger Teutsch provided the support for the Clipper CPU.
48452
48453   * Gary Thomas for his ongoing work to make the PPC work for
48454     GNU/Linux.
48455
48456   * Philipp Thomas for random bug fixes throughout the compiler
48457
48458   * Jason Thorpe for thread support in libstdc++ on NetBSD.
48459
48460   * Kresten Krab Thorup wrote the run time support for the Objective-C
48461     language and the fantastic Java bytecode interpreter.
48462
48463   * Michael Tiemann for random bug fixes, the first instruction
48464     scheduler, initial C++ support, function integration, NS32k, SPARC
48465     and M88k machine description work, delay slot scheduling.
48466
48467   * Andreas Tobler for his work porting libgcj to Darwin.
48468
48469   * Teemu Torma for thread safe exception handling support.
48470
48471   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
48472     definitions, and of the VAX machine description.
48473
48474   * Daniel Towner and Hariharan Sandanagobalane contributed and
48475     maintain the picoChip port.
48476
48477   * Tom Tromey for internationalization support and for his many Java
48478     contributions and libgcj maintainership.
48479
48480   * Lassi Tuura for improvements to config.guess to determine HP
48481     processor types.
48482
48483   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
48484
48485   * Andy Vaught for the design and initial implementation of the GNU
48486     Fortran front end.
48487
48488   * Brent Verner for work with the libstdc++ cshadow files and their
48489     associated configure steps.
48490
48491   * Todd Vierling for contributions for NetBSD ports.
48492
48493   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
48494     guidance.
48495
48496   * Dean Wakerley for converting the install documentation from HTML to
48497     texinfo in time for GCC 3.0.
48498
48499   * Krister Walfridsson for random bug fixes.
48500
48501   * Feng Wang for contributions to GNU Fortran.
48502
48503   * Stephen M. Webb for time and effort on making libstdc++ shadow
48504     files work with the tricky Solaris 8+ headers, and for pushing the
48505     build-time header tree.
48506
48507   * John Wehle for various improvements for the x86 code generator,
48508     related infrastructure improvements to help x86 code generation,
48509     value range propagation and other work, WE32k port.
48510
48511   * Ulrich Weigand for work on the s390 port.
48512
48513   * Zack Weinberg for major work on cpplib and various other bug fixes.
48514
48515   * Matt Welsh for help with Linux Threads support in GCJ.
48516
48517   * Urban Widmark for help fixing java.io.
48518
48519   * Mark Wielaard for new Java library code and his work integrating
48520     with Classpath.
48521
48522   * Dale Wiles helped port GCC to the Tahoe.
48523
48524   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
48525
48526   * Jim Wilson for his direction via the steering committee, tackling
48527     hard problems in various places that nobody else wanted to work on,
48528     strength reduction and other loop optimizations.
48529
48530   * Paul Woegerer and Tal Agmon for the CRX port.
48531
48532   * Carlo Wood for various fixes.
48533
48534   * Tom Wood for work on the m88k port.
48535
48536   * Canqun Yang for work on GNU Fortran.
48537
48538   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
48539     description for the Tron architecture (specifically, the Gmicro).
48540
48541   * Kevin Zachmann helped port GCC to the Tahoe.
48542
48543   * Ayal Zaks for Swing Modulo Scheduling (SMS).
48544
48545   * Xiaoqiang Zhang for work on GNU Fortran.
48546
48547   * Gilles Zunino for help porting Java to Irix.
48548
48549 The following people are recognized for their contributions to GNAT,
48550the Ada front end of GCC:
48551   * Bernard Banner
48552
48553   * Romain Berrendonner
48554
48555   * Geert Bosch
48556
48557   * Emmanuel Briot
48558
48559   * Joel Brobecker
48560
48561   * Ben Brosgol
48562
48563   * Vincent Celier
48564
48565   * Arnaud Charlet
48566
48567   * Chien Chieng
48568
48569   * Cyrille Comar
48570
48571   * Cyrille Crozes
48572
48573   * Robert Dewar
48574
48575   * Gary Dismukes
48576
48577   * Robert Duff
48578
48579   * Ed Falis
48580
48581   * Ramon Fernandez
48582
48583   * Sam Figueroa
48584
48585   * Vasiliy Fofanov
48586
48587   * Michael Friess
48588
48589   * Franco Gasperoni
48590
48591   * Ted Giering
48592
48593   * Matthew Gingell
48594
48595   * Laurent Guerby
48596
48597   * Jerome Guitton
48598
48599   * Olivier Hainque
48600
48601   * Jerome Hugues
48602
48603   * Hristian Kirtchev
48604
48605   * Jerome Lambourg
48606
48607   * Bruno Leclerc
48608
48609   * Albert Lee
48610
48611   * Sean McNeil
48612
48613   * Javier Miranda
48614
48615   * Laurent Nana
48616
48617   * Pascal Obry
48618
48619   * Dong-Ik Oh
48620
48621   * Laurent Pautet
48622
48623   * Brett Porter
48624
48625   * Thomas Quinot
48626
48627   * Nicolas Roche
48628
48629   * Pat Rogers
48630
48631   * Jose Ruiz
48632
48633   * Douglas Rupp
48634
48635   * Sergey Rybin
48636
48637   * Gail Schenker
48638
48639   * Ed Schonberg
48640
48641   * Nicolas Setton
48642
48643   * Samuel Tardieu
48644
48645 The following people are recognized for their contributions of new
48646features, bug reports, testing and integration of classpath/libgcj for
48647GCC version 4.1:
48648   * Lillian Angel for 'JTree' implementation and lots Free Swing
48649     additions and bug fixes.
48650
48651   * Wolfgang Baer for 'GapContent' bug fixes.
48652
48653   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
48654     event fixes, lots of Free Swing work including 'JTable' editing.
48655
48656   * Stuart Ballard for RMI constant fixes.
48657
48658   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
48659
48660   * Gary Benson for 'MessageFormat' fixes.
48661
48662   * Daniel Bonniot for 'Serialization' fixes.
48663
48664   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
48665     and 'DOM xml:id' support.
48666
48667   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
48668
48669   * Archie Cobbs for build fixes, VM interface updates,
48670     'URLClassLoader' updates.
48671
48672   * Kelley Cook for build fixes.
48673
48674   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
48675
48676   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
48677     improvements.
48678
48679   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
48680     2D support.  Lots of imageio framework additions, lots of AWT and
48681     Free Swing bug fixes.
48682
48683   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
48684     fixes, better 'Proxy' support, bug fixes and IKVM integration.
48685
48686   * Santiago Gala for 'AccessControlContext' fixes.
48687
48688   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
48689     improvements.
48690
48691   * David Gilbert for 'basic' and 'metal' icon and plaf support and
48692     lots of documenting, Lots of Free Swing and metal theme additions.
48693     'MetalIconFactory' implementation.
48694
48695   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
48696
48697   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
48698     build speedups.
48699
48700   * Kim Ho for 'JFileChooser' implementation.
48701
48702   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
48703     'Serialization' fixes, 'Properties' XML support and generic branch
48704     work, VMIntegration guide update.
48705
48706   * Bastiaan Huisman for 'TimeZone' bug fixing.
48707
48708   * Andreas Jaeger for mprec updates.
48709
48710   * Paul Jenner for better '-Werror' support.
48711
48712   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
48713
48714   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
48715     bug fixes all over.  Lots of Free Swing work including styled text.
48716
48717   * Simon Kitching for 'String' cleanups and optimization suggestions.
48718
48719   * Michael Koch for configuration fixes, 'Locale' updates, bug and
48720     build fixes.
48721
48722   * Guilhem Lavaux for configuration, thread and channel fixes and
48723     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
48724     fixes.
48725
48726   * David Lichteblau for JCL support library global/local reference
48727     cleanups.
48728
48729   * Aaron Luchko for JDWP updates and documentation fixes.
48730
48731   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
48732     features.
48733
48734   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
48735     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
48736     and implementing the Qt4 peers.
48737
48738   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
48739     'SystemLogger' and 'FileHandler' rotate implementations, NIO
48740     'FileChannel.map' support, security and policy updates.
48741
48742   * Bryce McKinlay for RMI work.
48743
48744   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48745     testing and documenting.
48746
48747   * Kalle Olavi Niemitalo for build fixes.
48748
48749   * Rainer Orth for build fixes.
48750
48751   * Andrew Overholt for 'File' locking fixes.
48752
48753   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
48754
48755   * Olga Rodimina for 'MenuSelectionManager' implementation.
48756
48757   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
48758
48759   * Julian Scheid for documentation updates and gjdoc support.
48760
48761   * Christian Schlichtherle for zip fixes and cleanups.
48762
48763   * Robert Schuster for documentation updates and beans fixes,
48764     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
48765     and URL, AWT and Free Swing bug fixes.
48766
48767   * Keith Seitz for lots of JDWP work.
48768
48769   * Christian Thalinger for 64-bit cleanups, Configuration and VM
48770     interface fixes and 'CACAO' integration, 'fdlibm' updates.
48771
48772   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
48773
48774   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
48775     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
48776
48777   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
48778     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
48779     'GdkPixbugDecoder' updates.
48780
48781   * Tom Tromey for Eclipse integration, generics work, lots of bug
48782     fixes and gcj integration including coordinating The Big Merge.
48783
48784   * Mark Wielaard for bug fixes, packaging and release management,
48785     'Clipboard' implementation, system call interrupts and network
48786     timeouts and 'GdkPixpufDecoder' fixes.
48787
48788 In addition to the above, all of which also contributed time and energy
48789in testing GCC, we would like to thank the following for their
48790contributions to testing:
48791
48792   * Michael Abd-El-Malek
48793
48794   * Thomas Arend
48795
48796   * Bonzo Armstrong
48797
48798   * Steven Ashe
48799
48800   * Chris Baldwin
48801
48802   * David Billinghurst
48803
48804   * Jim Blandy
48805
48806   * Stephane Bortzmeyer
48807
48808   * Horst von Brand
48809
48810   * Frank Braun
48811
48812   * Rodney Brown
48813
48814   * Sidney Cadot
48815
48816   * Bradford Castalia
48817
48818   * Robert Clark
48819
48820   * Jonathan Corbet
48821
48822   * Ralph Doncaster
48823
48824   * Richard Emberson
48825
48826   * Levente Farkas
48827
48828   * Graham Fawcett
48829
48830   * Mark Fernyhough
48831
48832   * Robert A. French
48833
48834   * Jo"rgen Freyh
48835
48836   * Mark K. Gardner
48837
48838   * Charles-Antoine Gauthier
48839
48840   * Yung Shing Gene
48841
48842   * David Gilbert
48843
48844   * Simon Gornall
48845
48846   * Fred Gray
48847
48848   * John Griffin
48849
48850   * Patrik Hagglund
48851
48852   * Phil Hargett
48853
48854   * Amancio Hasty
48855
48856   * Takafumi Hayashi
48857
48858   * Bryan W. Headley
48859
48860   * Kevin B. Hendricks
48861
48862   * Joep Jansen
48863
48864   * Christian Joensson
48865
48866   * Michel Kern
48867
48868   * David Kidd
48869
48870   * Tobias Kuipers
48871
48872   * Anand Krishnaswamy
48873
48874   * A. O. V. Le Blanc
48875
48876   * llewelly
48877
48878   * Damon Love
48879
48880   * Brad Lucier
48881
48882   * Matthias Klose
48883
48884   * Martin Knoblauch
48885
48886   * Rick Lutowski
48887
48888   * Jesse Macnish
48889
48890   * Stefan Morrell
48891
48892   * Anon A. Mous
48893
48894   * Matthias Mueller
48895
48896   * Pekka Nikander
48897
48898   * Rick Niles
48899
48900   * Jon Olson
48901
48902   * Magnus Persson
48903
48904   * Chris Pollard
48905
48906   * Richard Polton
48907
48908   * Derk Reefman
48909
48910   * David Rees
48911
48912   * Paul Reilly
48913
48914   * Tom Reilly
48915
48916   * Torsten Rueger
48917
48918   * Danny Sadinoff
48919
48920   * Marc Schifer
48921
48922   * Erik Schnetter
48923
48924   * Wayne K. Schroll
48925
48926   * David Schuler
48927
48928   * Vin Shelton
48929
48930   * Tim Souder
48931
48932   * Adam Sulmicki
48933
48934   * Bill Thorson
48935
48936   * George Talbot
48937
48938   * Pedro A. M. Vazquez
48939
48940   * Gregory Warnes
48941
48942   * Ian Watson
48943
48944   * David E. Young
48945
48946   * And many others
48947
48948 And finally we'd like to thank everyone who uses the compiler, provides
48949feedback and generally reminds us why we're doing this work in the first
48950place.
48951
48952
48953File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
48954
48955Option Index
48956************
48957
48958GCC's command line options are indexed here without any initial '-' or
48959'--'.  Where an option has both positive and negative forms (such as
48960'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
48961indexed under the most appropriate form; it may sometimes be useful to
48962look up both forms.
48963
48964�[index�]
48965* Menu:
48966
48967* ###:                                   Overall Options.    (line  209)
48968* -fno-keep-inline-dllexport:            Optimize Options.   (line  316)
48969* -mcpu:                                 RX Options.         (line   30)
48970* -mpointer-size=SIZE:                   VMS Options.        (line   20)
48971* 8bit-idiv:                             i386 and x86-64 Options.
48972                                                             (line  816)
48973* A:                                     Preprocessor Options.
48974                                                             (line  596)
48975* allowable_client:                      Darwin Options.     (line  196)
48976* all_load:                              Darwin Options.     (line  110)
48977* ansi:                                  Standards.          (line   16)
48978* ansi <1>:                              C Dialect Options.  (line   11)
48979* ansi <2>:                              Preprocessor Options.
48980                                                             (line  340)
48981* ansi <3>:                              Other Builtins.     (line   21)
48982* ansi <4>:                              Non-bugs.           (line  107)
48983* arch_errors_fatal:                     Darwin Options.     (line  114)
48984* aux-info:                              C Dialect Options.  (line  167)
48985* avx256-split-unaligned-load:           i386 and x86-64 Options.
48986                                                             (line  824)
48987* avx256-split-unaligned-store:          i386 and x86-64 Options.
48988                                                             (line  824)
48989* B:                                     Directory Options.  (line   44)
48990* Bdynamic:                              VxWorks Options.    (line   22)
48991* bind_at_load:                          Darwin Options.     (line  118)
48992* Bstatic:                               VxWorks Options.    (line   22)
48993* bundle:                                Darwin Options.     (line  123)
48994* bundle_loader:                         Darwin Options.     (line  127)
48995* c:                                     Overall Options.    (line  164)
48996* C:                                     Preprocessor Options.
48997                                                             (line  653)
48998* c <1>:                                 Link Options.       (line   20)
48999* client_name:                           Darwin Options.     (line  196)
49000* compatibility_version:                 Darwin Options.     (line  196)
49001* coverage:                              Debugging Options.  (line  409)
49002* current_version:                       Darwin Options.     (line  196)
49003* d:                                     Debugging Options.  (line  541)
49004* D:                                     Preprocessor Options.
49005                                                             (line   46)
49006* da:                                    Debugging Options.  (line  747)
49007* dA:                                    Debugging Options.  (line  750)
49008* dD:                                    Debugging Options.  (line  754)
49009* dD <1>:                                Preprocessor Options.
49010                                                             (line  627)
49011* dead_strip:                            Darwin Options.     (line  196)
49012* dependency-file:                       Darwin Options.     (line  196)
49013* dH:                                    Debugging Options.  (line  758)
49014* dI:                                    Preprocessor Options.
49015                                                             (line  636)
49016* dM:                                    Preprocessor Options.
49017                                                             (line  612)
49018* dN:                                    Preprocessor Options.
49019                                                             (line  633)
49020* dp:                                    Debugging Options.  (line  761)
49021* dP:                                    Debugging Options.  (line  766)
49022* dU:                                    Preprocessor Options.
49023                                                             (line  640)
49024* dumpmachine:                           Debugging Options.  (line 1351)
49025* dumpspecs:                             Debugging Options.  (line 1359)
49026* dumpversion:                           Debugging Options.  (line 1355)
49027* dx:                                    Debugging Options.  (line  770)
49028* dylib_file:                            Darwin Options.     (line  196)
49029* dylinker_install_name:                 Darwin Options.     (line  196)
49030* dynamic:                               Darwin Options.     (line  196)
49031* dynamiclib:                            Darwin Options.     (line  131)
49032* E:                                     Overall Options.    (line  185)
49033* E <1>:                                 Link Options.       (line   20)
49034* EB:                                    MIPS Options.       (line    7)
49035* EL:                                    MIPS Options.       (line   10)
49036* exported_symbols_list:                 Darwin Options.     (line  196)
49037* F:                                     Darwin Options.     (line   31)
49038* fabi-version:                          C++ Dialect Options.
49039                                                             (line   19)
49040* fada-spec-parent:                      Overall Options.    (line  367)
49041* faggressive-loop-optimizations:        Optimize Options.   (line  506)
49042* falign-functions:                      Optimize Options.   (line 1458)
49043* falign-jumps:                          Optimize Options.   (line 1507)
49044* falign-labels:                         Optimize Options.   (line 1476)
49045* falign-loops:                          Optimize Options.   (line 1494)
49046* fassociative-math:                     Optimize Options.   (line 1951)
49047* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
49048* fauto-inc-dec:                         Optimize Options.   (line  530)
49049* fbounds-check:                         Code Gen Options.   (line   15)
49050* fbranch-probabilities:                 Optimize Options.   (line 2079)
49051* fbranch-target-load-optimize:          Optimize Options.   (line 2187)
49052* fbranch-target-load-optimize2:         Optimize Options.   (line 2193)
49053* fbtr-bb-exclusive:                     Optimize Options.   (line 2197)
49054* fcall-saved:                           Code Gen Options.   (line  343)
49055* fcall-used:                            Code Gen Options.   (line  329)
49056* fcaller-saves:                         Optimize Options.   (line  825)
49057* fcheck-data-deps:                      Optimize Options.   (line 1090)
49058* fcheck-new:                            C++ Dialect Options.
49059                                                             (line   54)
49060* fcombine-stack-adjustments:            Optimize Options.   (line  837)
49061* fcommon:                               Variable Attributes.
49062                                                             (line  104)
49063* fcompare-debug:                        Debugging Options.  (line  200)
49064* fcompare-debug-second:                 Debugging Options.  (line  226)
49065* fcompare-elim:                         Optimize Options.   (line 1787)
49066* fcond-mismatch:                        C Dialect Options.  (line  317)
49067* fconserve-stack:                       Optimize Options.   (line  843)
49068* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
49069                                                             (line   30)
49070* fconstexpr-depth:                      C++ Dialect Options.
49071                                                             (line   64)
49072* fcprop-registers:                      Optimize Options.   (line 1805)
49073* fcrossjumping:                         Optimize Options.   (line  523)
49074* fcse-follow-jumps:                     Optimize Options.   (line  442)
49075* fcse-skip-blocks:                      Optimize Options.   (line  451)
49076* fcx-fortran-rules:                     Optimize Options.   (line 2066)
49077* fcx-limited-range:                     Optimize Options.   (line 2054)
49078* fdata-sections:                        Optimize Options.   (line 2168)
49079* fdbg-cnt:                              Debugging Options.  (line  461)
49080* fdbg-cnt-list:                         Debugging Options.  (line  458)
49081* fdce:                                  Optimize Options.   (line  536)
49082* fdebug-cpp:                            Preprocessor Options.
49083                                                             (line  527)
49084* fdebug-prefix-map:                     Debugging Options.  (line  320)
49085* fdebug-types-section:                  Debugging Options.  (line   74)
49086* fdeduce-init-list:                     C++ Dialect Options.
49087                                                             (line   70)
49088* fdelayed-branch:                       Optimize Options.   (line  672)
49089* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
49090* fdelete-null-pointer-checks:           Optimize Options.   (line  559)
49091* fdevirtualize:                         Optimize Options.   (line  577)
49092* fdiagnostics-show-caret:               Language Independent Options.
49093                                                             (line   40)
49094* fdiagnostics-show-location:            Language Independent Options.
49095                                                             (line   20)
49096* fdiagnostics-show-option:              Language Independent Options.
49097                                                             (line   34)
49098* fdirectives-only:                      Preprocessor Options.
49099                                                             (line  475)
49100* fdisable-:                             Debugging Options.  (line  471)
49101* fdollars-in-identifiers:               Preprocessor Options.
49102                                                             (line  496)
49103* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
49104* fdse:                                  Optimize Options.   (line  540)
49105* fdump-ada-spec:                        Overall Options.    (line  362)
49106* fdump-class-hierarchy:                 Debugging Options.  (line  801)
49107* fdump-final-insns:                     Debugging Options.  (line  194)
49108* fdump-go-spec:                         Overall Options.    (line  371)
49109* fdump-ipa:                             Debugging Options.  (line  809)
49110* fdump-noaddr:                          Debugging Options.  (line  774)
49111* fdump-passes:                          Debugging Options.  (line  826)
49112* fdump-rtl-alignments:                  Debugging Options.  (line  562)
49113* fdump-rtl-all:                         Debugging Options.  (line  747)
49114* fdump-rtl-asmcons:                     Debugging Options.  (line  565)
49115* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  569)
49116* fdump-rtl-barriers:                    Debugging Options.  (line  573)
49117* fdump-rtl-bbpart:                      Debugging Options.  (line  576)
49118* fdump-rtl-bbro:                        Debugging Options.  (line  579)
49119* fdump-rtl-btl2:                        Debugging Options.  (line  583)
49120* fdump-rtl-btl2 <1>:                    Debugging Options.  (line  583)
49121* fdump-rtl-bypass:                      Debugging Options.  (line  587)
49122* fdump-rtl-ce1:                         Debugging Options.  (line  598)
49123* fdump-rtl-ce2:                         Debugging Options.  (line  598)
49124* fdump-rtl-ce3:                         Debugging Options.  (line  598)
49125* fdump-rtl-combine:                     Debugging Options.  (line  590)
49126* fdump-rtl-compgotos:                   Debugging Options.  (line  593)
49127* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  602)
49128* fdump-rtl-csa:                         Debugging Options.  (line  605)
49129* fdump-rtl-cse1:                        Debugging Options.  (line  609)
49130* fdump-rtl-cse2:                        Debugging Options.  (line  609)
49131* fdump-rtl-dbr:                         Debugging Options.  (line  616)
49132* fdump-rtl-dce:                         Debugging Options.  (line  613)
49133* fdump-rtl-dce1:                        Debugging Options.  (line  620)
49134* fdump-rtl-dce2:                        Debugging Options.  (line  620)
49135* fdump-rtl-dfinish:                     Debugging Options.  (line  743)
49136* fdump-rtl-dfinit:                      Debugging Options.  (line  743)
49137* fdump-rtl-eh:                          Debugging Options.  (line  624)
49138* fdump-rtl-eh_ranges:                   Debugging Options.  (line  627)
49139* fdump-rtl-expand:                      Debugging Options.  (line  630)
49140* fdump-rtl-fwprop1:                     Debugging Options.  (line  634)
49141* fdump-rtl-fwprop2:                     Debugging Options.  (line  634)
49142* fdump-rtl-gcse1:                       Debugging Options.  (line  639)
49143* fdump-rtl-gcse2:                       Debugging Options.  (line  639)
49144* fdump-rtl-init-regs:                   Debugging Options.  (line  643)
49145* fdump-rtl-initvals:                    Debugging Options.  (line  646)
49146* fdump-rtl-into_cfglayout:              Debugging Options.  (line  649)
49147* fdump-rtl-ira:                         Debugging Options.  (line  652)
49148* fdump-rtl-jump:                        Debugging Options.  (line  655)
49149* fdump-rtl-loop2:                       Debugging Options.  (line  658)
49150* fdump-rtl-mach:                        Debugging Options.  (line  662)
49151* fdump-rtl-mode_sw:                     Debugging Options.  (line  666)
49152* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  672)
49153* fdump-rtl-peephole2:                   Debugging Options.  (line  675)
49154* fdump-rtl-postreload:                  Debugging Options.  (line  678)
49155* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  681)
49156* fdump-rtl-regclass:                    Debugging Options.  (line  743)
49157* fdump-rtl-regmove:                     Debugging Options.  (line  684)
49158* fdump-rtl-rnreg:                       Debugging Options.  (line  669)
49159* fdump-rtl-sched1:                      Debugging Options.  (line  688)
49160* fdump-rtl-sched2:                      Debugging Options.  (line  688)
49161* fdump-rtl-see:                         Debugging Options.  (line  692)
49162* fdump-rtl-seqabstr:                    Debugging Options.  (line  695)
49163* fdump-rtl-shorten:                     Debugging Options.  (line  698)
49164* fdump-rtl-sibling:                     Debugging Options.  (line  701)
49165* fdump-rtl-sms:                         Debugging Options.  (line  713)
49166* fdump-rtl-split1:                      Debugging Options.  (line  708)
49167* fdump-rtl-split2:                      Debugging Options.  (line  708)
49168* fdump-rtl-split3:                      Debugging Options.  (line  708)
49169* fdump-rtl-split4:                      Debugging Options.  (line  708)
49170* fdump-rtl-split5:                      Debugging Options.  (line  708)
49171* fdump-rtl-stack:                       Debugging Options.  (line  717)
49172* fdump-rtl-subreg1:                     Debugging Options.  (line  723)
49173* fdump-rtl-subreg2:                     Debugging Options.  (line  723)
49174* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  743)
49175* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  743)
49176* fdump-rtl-unshare:                     Debugging Options.  (line  727)
49177* fdump-rtl-vartrack:                    Debugging Options.  (line  730)
49178* fdump-rtl-vregs:                       Debugging Options.  (line  733)
49179* fdump-rtl-web:                         Debugging Options.  (line  736)
49180* fdump-statistics:                      Debugging Options.  (line  830)
49181* fdump-translation-unit:                Debugging Options.  (line  792)
49182* fdump-tree:                            Debugging Options.  (line  842)
49183* fdump-tree-alias:                      Debugging Options.  (line  964)
49184* fdump-tree-all:                        Debugging Options.  (line 1053)
49185* fdump-tree-ccp:                        Debugging Options.  (line  968)
49186* fdump-tree-cfg:                        Debugging Options.  (line  952)
49187* fdump-tree-ch:                         Debugging Options.  (line  956)
49188* fdump-tree-copyprop:                   Debugging Options.  (line  984)
49189* fdump-tree-copyrename:                 Debugging Options.  (line 1029)
49190* fdump-tree-dce:                        Debugging Options.  (line  992)
49191* fdump-tree-dom:                        Debugging Options.  (line 1010)
49192* fdump-tree-dse:                        Debugging Options.  (line 1015)
49193* fdump-tree-forwprop:                   Debugging Options.  (line 1024)
49194* fdump-tree-fre:                        Debugging Options.  (line  980)
49195* fdump-tree-gimple:                     Debugging Options.  (line  947)
49196* fdump-tree-mudflap:                    Debugging Options.  (line  996)
49197* fdump-tree-nrv:                        Debugging Options.  (line 1034)
49198* fdump-tree-optimized:                  Debugging Options.  (line  944)
49199* fdump-tree-original:                   Debugging Options.  (line  941)
49200* fdump-tree-phiopt:                     Debugging Options.  (line 1019)
49201* fdump-tree-pre:                        Debugging Options.  (line  976)
49202* fdump-tree-sink:                       Debugging Options.  (line 1006)
49203* fdump-tree-slp:                        Debugging Options.  (line 1044)
49204* fdump-tree-sra:                        Debugging Options.  (line 1001)
49205* fdump-tree-ssa:                        Debugging Options.  (line  960)
49206* fdump-tree-storeccp:                   Debugging Options.  (line  972)
49207* fdump-tree-store_copyprop:             Debugging Options.  (line  988)
49208* fdump-tree-vect:                       Debugging Options.  (line 1039)
49209* fdump-tree-vrp:                        Debugging Options.  (line 1049)
49210* fdump-unnumbered:                      Debugging Options.  (line  780)
49211* fdump-unnumbered-links:                Debugging Options.  (line  786)
49212* fdwarf2-cfi-asm:                       Debugging Options.  (line  324)
49213* fearly-inlining:                       Optimize Options.   (line  275)
49214* feliminate-dwarf2-dups:                Debugging Options.  (line  239)
49215* feliminate-unused-debug-symbols:       Debugging Options.  (line   62)
49216* feliminate-unused-debug-types:         Debugging Options.  (line 1363)
49217* fenable-:                              Debugging Options.  (line  471)
49218* fexceptions:                           Code Gen Options.   (line  109)
49219* fexcess-precision:                     Optimize Options.   (line 1878)
49220* fexec-charset:                         Preprocessor Options.
49221                                                             (line  554)
49222* fexpensive-optimizations:              Optimize Options.   (line  584)
49223* fext-numeric-literals:                 C++ Dialect Options.
49224                                                             (line  541)
49225* fextended-identifiers:                 Preprocessor Options.
49226                                                             (line  499)
49227* fextern-tls-init:                      C++ Dialect Options.
49228                                                             (line  120)
49229* ffast-math:                            Optimize Options.   (line 1901)
49230* ffat-lto-objects:                      Optimize Options.   (line 1768)
49231* ffinite-math-only:                     Optimize Options.   (line 1978)
49232* ffix-and-continue:                     Darwin Options.     (line  104)
49233* ffixed:                                Code Gen Options.   (line  317)
49234* ffloat-store:                          Optimize Options.   (line 1864)
49235* ffloat-store <1>:                      Disappointments.    (line   77)
49236* ffor-scope:                            C++ Dialect Options.
49237                                                             (line  141)
49238* fforward-propagate:                    Optimize Options.   (line  185)
49239* ffp-contract:                          Optimize Options.   (line  194)
49240* ffreestanding:                         Standards.          (line   93)
49241* ffreestanding <1>:                     C Dialect Options.  (line  246)
49242* ffreestanding <2>:                     Warning Options.    (line  253)
49243* ffreestanding <3>:                     Function Attributes.
49244                                                             (line  454)
49245* ffriend-injection:                     C++ Dialect Options.
49246                                                             (line   91)
49247* ffunction-sections:                    Optimize Options.   (line 2168)
49248* fgcse:                                 Optimize Options.   (line  465)
49249* fgcse-after-reload:                    Optimize Options.   (line  501)
49250* fgcse-las:                             Optimize Options.   (line  494)
49251* fgcse-lm:                              Optimize Options.   (line  476)
49252* fgcse-sm:                              Optimize Options.   (line  485)
49253* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
49254                                                             (line   39)
49255* fgnu-tm:                               C Dialect Options.  (line  266)
49256* fgnu89-inline:                         C Dialect Options.  (line  146)
49257* fgraphite-identity:                    Optimize Options.   (line 1070)
49258* fhosted:                               C Dialect Options.  (line  238)
49259* fif-conversion:                        Optimize Options.   (line  544)
49260* fif-conversion2:                       Optimize Options.   (line  553)
49261* filelist:                              Darwin Options.     (line  196)
49262* findirect-data:                        Darwin Options.     (line  104)
49263* findirect-inlining:                    Optimize Options.   (line  248)
49264* finhibit-size-directive:               Code Gen Options.   (line  238)
49265* finline-functions:                     Optimize Options.   (line  256)
49266* finline-functions-called-once:         Optimize Options.   (line  267)
49267* finline-limit:                         Optimize Options.   (line  291)
49268* finline-small-functions:               Optimize Options.   (line  239)
49269* finput-charset:                        Preprocessor Options.
49270                                                             (line  567)
49271* finstrument-functions:                 Code Gen Options.   (line  373)
49272* finstrument-functions <1>:             Function Attributes.
49273                                                             (line  953)
49274* finstrument-functions-exclude-file-list: Code Gen Options. (line  408)
49275* finstrument-functions-exclude-function-list: Code Gen Options.
49276                                                             (line  429)
49277* fipa-cp:                               Optimize Options.   (line  909)
49278* fipa-cp-clone:                         Optimize Options.   (line  917)
49279* fipa-profile:                          Optimize Options.   (line  901)
49280* fipa-pta:                              Optimize Options.   (line  895)
49281* fipa-pure-const:                       Optimize Options.   (line  887)
49282* fipa-reference:                        Optimize Options.   (line  891)
49283* fipa-sra:                              Optimize Options.   (line  284)
49284* fira-hoist-pressure:                   Optimize Options.   (line  639)
49285* fira-loop-pressure:                    Optimize Options.   (line  646)
49286* fira-verbose:                          Optimize Options.   (line  666)
49287* fivopts:                               Optimize Options.   (line 1166)
49288* fkeep-inline-functions:                Optimize Options.   (line  322)
49289* fkeep-inline-functions <1>:            Inline.             (line   51)
49290* fkeep-static-consts:                   Optimize Options.   (line  329)
49291* flat_namespace:                        Darwin Options.     (line  196)
49292* flax-vector-conversions:               C Dialect Options.  (line  322)
49293* fleading-underscore:                   Code Gen Options.   (line  511)
49294* floop-block:                           Optimize Options.   (line 1041)
49295* floop-interchange:                     Optimize Options.   (line  996)
49296* floop-nest-optimize:                   Optimize Options.   (line 1078)
49297* floop-parallelize-all:                 Optimize Options.   (line 1084)
49298* floop-strip-mine:                      Optimize Options.   (line 1020)
49299* flto:                                  Optimize Options.   (line 1561)
49300* flto-partition:                        Optimize Options.   (line 1723)
49301* fmax-errors:                           Warning Options.    (line   18)
49302* fmem-report:                           Debugging Options.  (line  348)
49303* fmem-report-wpa:                       Debugging Options.  (line  352)
49304* fmerge-all-constants:                  Optimize Options.   (line  348)
49305* fmerge-constants:                      Optimize Options.   (line  338)
49306* fmerge-debug-strings:                  Debugging Options.  (line  313)
49307* fmessage-length:                       Language Independent Options.
49308                                                             (line   14)
49309* fmodulo-sched:                         Optimize Options.   (line  359)
49310* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  364)
49311* fmove-loop-invariants:                 Optimize Options.   (line 2158)
49312* fms-extensions:                        C Dialect Options.  (line  281)
49313* fms-extensions <1>:                    C++ Dialect Options.
49314                                                             (line  175)
49315* fms-extensions <2>:                    Unnamed Fields.     (line   36)
49316* fmudflap:                              Optimize Options.   (line  404)
49317* fmudflapir:                            Optimize Options.   (line  404)
49318* fmudflapth:                            Optimize Options.   (line  404)
49319* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
49320                                                             (line   43)
49321* fno-access-control:                    C++ Dialect Options.
49322                                                             (line   50)
49323* fno-asm:                               C Dialect Options.  (line  190)
49324* fno-branch-count-reg:                  Optimize Options.   (line  371)
49325* fno-builtin:                           C Dialect Options.  (line  204)
49326* fno-builtin <1>:                       Warning Options.    (line  253)
49327* fno-builtin <2>:                       Function Attributes.
49328                                                             (line  454)
49329* fno-builtin <3>:                       Other Builtins.     (line   14)
49330* fno-canonical-system-headers:          Preprocessor Options.
49331                                                             (line  504)
49332* fno-common:                            Code Gen Options.   (line  216)
49333* fno-common <1>:                        Variable Attributes.
49334                                                             (line  104)
49335* fno-compare-debug:                     Debugging Options.  (line  200)
49336* fno-debug-types-section:               Debugging Options.  (line   74)
49337* fno-default-inline:                    C++ Dialect Options.
49338                                                             (line  354)
49339* fno-default-inline <1>:                Optimize Options.   (line  169)
49340* fno-default-inline <2>:                Inline.             (line   71)
49341* fno-defer-pop:                         Optimize Options.   (line  177)
49342* fno-diagnostics-show-caret:            Language Independent Options.
49343                                                             (line   40)
49344* fno-diagnostics-show-option:           Language Independent Options.
49345                                                             (line   34)
49346* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  324)
49347* fno-elide-constructors:                C++ Dialect Options.
49348                                                             (line  104)
49349* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1363)
49350* fno-enforce-eh-specs:                  C++ Dialect Options.
49351                                                             (line  110)
49352* fno-ext-numeric-literals:              C++ Dialect Options.
49353                                                             (line  541)
49354* fno-extern-tls-init:                   C++ Dialect Options.
49355                                                             (line  120)
49356* fno-for-scope:                         C++ Dialect Options.
49357                                                             (line  141)
49358* fno-function-cse:                      Optimize Options.   (line  381)
49359* fno-gnu-keywords:                      C++ Dialect Options.
49360                                                             (line  153)
49361* fno-guess-branch-probability:          Optimize Options.   (line 1330)
49362* fno-ident:                             Code Gen Options.   (line  235)
49363* fno-implement-inlines:                 C++ Dialect Options.
49364                                                             (line  170)
49365* fno-implement-inlines <1>:             C++ Interface.      (line   75)
49366* fno-implicit-inline-templates:         C++ Dialect Options.
49367                                                             (line  164)
49368* fno-implicit-templates:                C++ Dialect Options.
49369                                                             (line  158)
49370* fno-implicit-templates <1>:            Template Instantiation.
49371                                                             (line   78)
49372* fno-inline:                            Optimize Options.   (line  231)
49373* fno-ira-share-save-slots:              Optimize Options.   (line  654)
49374* fno-ira-share-spill-slots:             Optimize Options.   (line  660)
49375* fno-jump-tables:                       Code Gen Options.   (line  309)
49376* fno-math-errno:                        Optimize Options.   (line 1915)
49377* fno-merge-debug-strings:               Debugging Options.  (line  313)
49378* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
49379                                                             (line   49)
49380* fno-nonansi-builtins:                  C++ Dialect Options.
49381                                                             (line  180)
49382* fno-operator-names:                    C++ Dialect Options.
49383                                                             (line  196)
49384* fno-optional-diags:                    C++ Dialect Options.
49385                                                             (line  200)
49386* fno-peephole:                          Optimize Options.   (line 1321)
49387* fno-peephole2:                         Optimize Options.   (line 1321)
49388* fno-pretty-templates:                  C++ Dialect Options.
49389                                                             (line  210)
49390* fno-rtti:                              C++ Dialect Options.
49391                                                             (line  227)
49392* fno-sched-interblock:                  Optimize Options.   (line  698)
49393* fno-sched-spec:                        Optimize Options.   (line  703)
49394* fno-set-stack-executable:              i386 and x86-64 Windows Options.
49395                                                             (line   46)
49396* fno-show-column:                       Preprocessor Options.
49397                                                             (line  591)
49398* fno-signed-bitfields:                  C Dialect Options.  (line  355)
49399* fno-signed-zeros:                      Optimize Options.   (line 1990)
49400* fno-stack-limit:                       Code Gen Options.   (line  479)
49401* fno-threadsafe-statics:                C++ Dialect Options.
49402                                                             (line  264)
49403* fno-toplevel-reorder:                  Optimize Options.   (line 1527)
49404* fno-trapping-math:                     Optimize Options.   (line 2000)
49405* fno-unsigned-bitfields:                C Dialect Options.  (line  355)
49406* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
49407                                                             (line  277)
49408* fno-var-tracking-assignments:          Debugging Options.  (line 1271)
49409* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1280)
49410* fno-weak:                              C++ Dialect Options.
49411                                                             (line  339)
49412* fno-working-directory:                 Preprocessor Options.
49413                                                             (line  577)
49414* fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
49415                                                             (line   53)
49416* fno-zero-initialized-in-bss:           Optimize Options.   (line  392)
49417* fnon-call-exceptions:                  Code Gen Options.   (line  123)
49418* fnothrow-opt:                          C++ Dialect Options.
49419                                                             (line  185)
49420* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
49421                                                             (line   56)
49422* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
49423                                                             (line   67)
49424* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
49425                                                             (line   92)
49426* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
49427                                                             (line   96)
49428* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
49429                                                             (line  105)
49430* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
49431                                                             (line  111)
49432* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
49433                                                             (line  120)
49434* fomit-frame-pointer:                   Optimize Options.   (line  205)
49435* fopenmp:                               C Dialect Options.  (line  257)
49436* fopt-info:                             Debugging Options.  (line 1059)
49437* foptimize-register-move:               Optimize Options.   (line  599)
49438* foptimize-sibling-calls:               Optimize Options.   (line  226)
49439* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
49440* force_flat_namespace:                  Darwin Options.     (line  196)
49441* fpack-struct:                          Code Gen Options.   (line  360)
49442* fpartial-inlining:                     Optimize Options.   (line 1296)
49443* fpcc-struct-return:                    Code Gen Options.   (line  152)
49444* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
49445* fpch-deps:                             Preprocessor Options.
49446                                                             (line  296)
49447* fpch-preprocess:                       Preprocessor Options.
49448                                                             (line  304)
49449* fpeel-loops:                           Optimize Options.   (line 2150)
49450* fpermissive:                           C++ Dialect Options.
49451                                                             (line  205)
49452* fpic:                                  Code Gen Options.   (line  266)
49453* fPIC:                                  Code Gen Options.   (line  287)
49454* fpie:                                  Code Gen Options.   (line  300)
49455* fPIE:                                  Code Gen Options.   (line  300)
49456* fplan9-extensions:                     Unnamed Fields.     (line   43)
49457* fpost-ipa-mem-report:                  Debugging Options.  (line  357)
49458* fpre-ipa-mem-report:                   Debugging Options.  (line  356)
49459* fpredictive-commoning:                 Optimize Options.   (line 1303)
49460* fprefetch-loop-arrays:                 Optimize Options.   (line 1310)
49461* fpreprocessed:                         Preprocessor Options.
49462                                                             (line  508)
49463* fprofile-arcs:                         Debugging Options.  (line  394)
49464* fprofile-arcs <1>:                     Other Builtins.     (line  253)
49465* fprofile-correction:                   Optimize Options.   (line 1812)
49466* fprofile-dir:                          Optimize Options.   (line 1819)
49467* fprofile-generate:                     Optimize Options.   (line 1830)
49468* fprofile-report:                       Debugging Options.  (line  361)
49469* fprofile-use:                          Optimize Options.   (line 1844)
49470* fprofile-values:                       Optimize Options.   (line 2098)
49471* fpu:                                   RX Options.         (line   17)
49472* frandom-seed:                          Debugging Options.  (line 1165)
49473* freciprocal-math:                      Optimize Options.   (line 1968)
49474* frecord-gcc-switches:                  Code Gen Options.   (line  254)
49475* free:                                  Optimize Options.   (line  590)
49476* freg-struct-return:                    Code Gen Options.   (line  170)
49477* fregmove:                              Optimize Options.   (line  599)
49478* frename-registers:                     Optimize Options.   (line 2117)
49479* freorder-blocks:                       Optimize Options.   (line 1347)
49480* freorder-blocks-and-partition:         Optimize Options.   (line 1353)
49481* freorder-functions:                    Optimize Options.   (line 1364)
49482* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
49483                                                             (line  131)
49484* frepo:                                 C++ Dialect Options.
49485                                                             (line  222)
49486* frepo <1>:                             Template Instantiation.
49487                                                             (line   54)
49488* frerun-cse-after-loop:                 Optimize Options.   (line  459)
49489* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  797)
49490* frounding-math:                        Optimize Options.   (line 2015)
49491* fsched-critical-path-heuristic:        Optimize Options.   (line  763)
49492* fsched-dep-count-heuristic:            Optimize Options.   (line  790)
49493* fsched-group-heuristic:                Optimize Options.   (line  757)
49494* fsched-last-insn-heuristic:            Optimize Options.   (line  783)
49495* fsched-pressure:                       Optimize Options.   (line  708)
49496* fsched-rank-heuristic:                 Optimize Options.   (line  776)
49497* fsched-spec-insn-heuristic:            Optimize Options.   (line  769)
49498* fsched-spec-load:                      Optimize Options.   (line  717)
49499* fsched-spec-load-dangerous:            Optimize Options.   (line  722)
49500* fsched-stalled-insns:                  Optimize Options.   (line  728)
49501* fsched-stalled-insns-dep:              Optimize Options.   (line  738)
49502* fsched-verbose:                        Debugging Options.  (line 1175)
49503* fsched2-use-superblocks:               Optimize Options.   (line  747)
49504* fschedule-insns:                       Optimize Options.   (line  679)
49505* fschedule-insns2:                      Optimize Options.   (line  689)
49506* fsection-anchors:                      Optimize Options.   (line 2213)
49507* fsel-sched-pipelining:                 Optimize Options.   (line  810)
49508* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  815)
49509* fselective-scheduling:                 Optimize Options.   (line  802)
49510* fselective-scheduling2:                Optimize Options.   (line  806)
49511* fshort-double:                         Code Gen Options.   (line  198)
49512* fshort-enums:                          Code Gen Options.   (line  188)
49513* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
49514                                                             (line   43)
49515* fshort-enums <2>:                      Type Attributes.    (line  113)
49516* fshort-enums <3>:                      Non-bugs.           (line   42)
49517* fshort-wchar:                          Code Gen Options.   (line  206)
49518* fshrink-wrap:                          Optimize Options.   (line  820)
49519* fsignaling-nans:                       Optimize Options.   (line 2035)
49520* fsigned-bitfields:                     C Dialect Options.  (line  355)
49521* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
49522* fsigned-char:                          C Dialect Options.  (line  345)
49523* fsigned-char <1>:                      Characters implementation.
49524                                                             (line   31)
49525* fsingle-precision-constant:            Optimize Options.   (line 2050)
49526* fsplit-ivs-in-unroller:                Optimize Options.   (line 1277)
49527* fsplit-stack:                          Code Gen Options.   (line  493)
49528* fsplit-stack <1>:                      Function Attributes.
49529                                                             (line  958)
49530* fsplit-wide-types:                     Optimize Options.   (line  434)
49531* fstack-check:                          Code Gen Options.   (line  441)
49532* fstack-limit-register:                 Code Gen Options.   (line  479)
49533* fstack-limit-symbol:                   Code Gen Options.   (line  479)
49534* fstack-protector:                      Optimize Options.   (line 2201)
49535* fstack-protector-all:                  Optimize Options.   (line 2210)
49536* fstack-usage:                          Debugging Options.  (line  365)
49537* fstack_reuse:                          Code Gen Options.   (line   21)
49538* fstats:                                C++ Dialect Options.
49539                                                             (line  237)
49540* fstrict-aliasing:                      Optimize Options.   (line 1377)
49541* fstrict-enums:                         C++ Dialect Options.
49542                                                             (line  242)
49543* fstrict-overflow:                      Optimize Options.   (line 1423)
49544* fstrict-volatile-bitfields:            Code Gen Options.   (line  596)
49545* fsync-libcalls:                        Code Gen Options.   (line  624)
49546* fsyntax-only:                          Warning Options.    (line   14)
49547* ftabstop:                              Preprocessor Options.
49548                                                             (line  521)
49549* ftemplate-backtrace-limit:             C++ Dialect Options.
49550                                                             (line  251)
49551* ftemplate-depth:                       C++ Dialect Options.
49552                                                             (line  255)
49553* ftest-coverage:                        Debugging Options.  (line  449)
49554* fthread-jumps:                         Optimize Options.   (line  425)
49555* ftime-report:                          Debugging Options.  (line  344)
49556* ftls-model:                            Code Gen Options.   (line  522)
49557* ftracer:                               Optimize Options.   (line 1260)
49558* ftracer <1>:                           Optimize Options.   (line 2127)
49559* ftrack-macro-expansion:                Preprocessor Options.
49560                                                             (line  536)
49561* ftrapv:                                Code Gen Options.   (line   97)
49562* ftree-bit-ccp:                         Optimize Options.   (line  931)
49563* ftree-builtin-call-dce:                Optimize Options.   (line  959)
49564* ftree-ccp:                             Optimize Options.   (line  937)
49565* ftree-ch:                              Optimize Options.   (line  979)
49566* ftree-copy-prop:                       Optimize Options.   (line  882)
49567* ftree-copyrename:                      Optimize Options.   (line 1190)
49568* ftree-dce:                             Optimize Options.   (line  955)
49569* ftree-dominator-opts:                  Optimize Options.   (line  965)
49570* ftree-dse:                             Optimize Options.   (line  972)
49571* ftree-forwprop:                        Optimize Options.   (line  861)
49572* ftree-fre:                             Optimize Options.   (line  865)
49573* ftree-loop-im:                         Optimize Options.   (line 1151)
49574* ftree-loop-ivcanon:                    Optimize Options.   (line 1160)
49575* ftree-loop-linear:                     Optimize Options.   (line  990)
49576* ftree-loop-optimize:                   Optimize Options.   (line  986)
49577* ftree-parallelize-loops:               Optimize Options.   (line 1171)
49578* ftree-partial-pre:                     Optimize Options.   (line  857)
49579* ftree-phiprop:                         Optimize Options.   (line  872)
49580* ftree-pre:                             Optimize Options.   (line  853)
49581* ftree-pta:                             Optimize Options.   (line 1180)
49582* ftree-reassoc:                         Optimize Options.   (line  849)
49583* ftree-sink:                            Optimize Options.   (line  927)
49584* ftree-slp-vectorize:                   Optimize Options.   (line 1234)
49585* ftree-slsr:                            Optimize Options.   (line 1224)
49586* ftree-sra:                             Optimize Options.   (line 1184)
49587* ftree-ter:                             Optimize Options.   (line 1216)
49588* ftree-vect-loop-version:               Optimize Options.   (line 1238)
49589* ftree-vectorize:                       Optimize Options.   (line 1230)
49590* ftree-vectorizer-verbose:              Debugging Options.  (line 1148)
49591* ftree-vrp:                             Optimize Options.   (line 1251)
49592* funit-at-a-time:                       Optimize Options.   (line 1520)
49593* funroll-all-loops:                     Optimize Options.   (line 1271)
49594* funroll-all-loops <1>:                 Optimize Options.   (line 2144)
49595* funroll-loops:                         Optimize Options.   (line 1265)
49596* funroll-loops <1>:                     Optimize Options.   (line 2134)
49597* funsafe-loop-optimizations:            Optimize Options.   (line  515)
49598* funsafe-math-optimizations:            Optimize Options.   (line 1933)
49599* funsigned-bitfields:                   C Dialect Options.  (line  355)
49600* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
49601                                                             (line   17)
49602* funsigned-bitfields <2>:               Non-bugs.           (line   57)
49603* funsigned-char:                        C Dialect Options.  (line  327)
49604* funsigned-char <1>:                    Characters implementation.
49605                                                             (line   31)
49606* funswitch-loops:                       Optimize Options.   (line 2162)
49607* funwind-tables:                        Code Gen Options.   (line  139)
49608* fuse-cxa-atexit:                       C++ Dialect Options.
49609                                                             (line  270)
49610* fvar-tracking:                         Debugging Options.  (line 1261)
49611* fvar-tracking-assignments:             Debugging Options.  (line 1271)
49612* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1280)
49613* fvariable-expansion-in-unroller:       Optimize Options.   (line 1291)
49614* fvect-cost-model:                      Optimize Options.   (line 1247)
49615* fverbose-asm:                          Code Gen Options.   (line  245)
49616* fvisibility:                           Code Gen Options.   (line  530)
49617* fvisibility-inlines-hidden:            C++ Dialect Options.
49618                                                             (line  282)
49619* fvisibility-ms-compat:                 C++ Dialect Options.
49620                                                             (line  310)
49621* fvpt:                                  Optimize Options.   (line 2107)
49622* fweb:                                  Optimize Options.   (line 1539)
49623* fwhole-program:                        Optimize Options.   (line 1550)
49624* fwide-exec-charset:                    Preprocessor Options.
49625                                                             (line  559)
49626* fworking-directory:                    Preprocessor Options.
49627                                                             (line  577)
49628* fwrapv:                                Code Gen Options.   (line  101)
49629* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
49630                                                             (line  141)
49631* g:                                     Debugging Options.  (line   10)
49632* G:                                     M32R/D Options.     (line   57)
49633* G <1>:                                 MIPS Options.       (line  329)
49634* G <2>:                                 RS/6000 and PowerPC Options.
49635                                                             (line  739)
49636* G <3>:                                 System V Options.   (line   10)
49637* gcoff:                                 Debugging Options.  (line   89)
49638* gdwarf-VERSION:                        Debugging Options.  (line  107)
49639* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
49640                                                             (line  153)
49641* gfull:                                 Darwin Options.     (line   69)
49642* ggdb:                                  Debugging Options.  (line   45)
49643* gno-record-gcc-switches:               Debugging Options.  (line  127)
49644* gno-strict-dwarf:                      Debugging Options.  (line  137)
49645* gpubnames:                             Debugging Options.  (line   51)
49646* grecord-gcc-switches:                  Debugging Options.  (line  118)
49647* gsplit-dwarf:                          Debugging Options.  (line   38)
49648* gstabs:                                Debugging Options.  (line   54)
49649* gstabs+:                               Debugging Options.  (line   83)
49650* gstrict-dwarf:                         Debugging Options.  (line  131)
49651* gtoggle:                               Debugging Options.  (line  174)
49652* gused:                                 Darwin Options.     (line   64)
49653* gvms:                                  Debugging Options.  (line  141)
49654* gxcoff:                                Debugging Options.  (line   94)
49655* gxcoff+:                               Debugging Options.  (line   99)
49656* H:                                     Preprocessor Options.
49657                                                             (line  707)
49658* headerpad_max_install_names:           Darwin Options.     (line  196)
49659* help:                                  Overall Options.    (line  221)
49660* help <1>:                              Preprocessor Options.
49661                                                             (line  699)
49662* hoist-adjacent-loads:                  Optimize Options.   (line  876)
49663* I:                                     Preprocessor Options.
49664                                                             (line   77)
49665* I <1>:                                 Directory Options.  (line   10)
49666* I-:                                    Preprocessor Options.
49667                                                             (line  389)
49668* I- <1>:                                Directory Options.  (line  116)
49669* idirafter:                             Preprocessor Options.
49670                                                             (line  431)
49671* iframework:                            Darwin Options.     (line   57)
49672* imacros:                               Preprocessor Options.
49673                                                             (line  422)
49674* image_base:                            Darwin Options.     (line  196)
49675* imultilib:                             Preprocessor Options.
49676                                                             (line  456)
49677* include:                               Preprocessor Options.
49678                                                             (line  411)
49679* init:                                  Darwin Options.     (line  196)
49680* install_name:                          Darwin Options.     (line  196)
49681* iprefix:                               Preprocessor Options.
49682                                                             (line  438)
49683* iquote:                                Preprocessor Options.
49684                                                             (line  468)
49685* iquote <1>:                            Directory Options.  (line   34)
49686* isysroot:                              Preprocessor Options.
49687                                                             (line  450)
49688* isystem:                               Preprocessor Options.
49689                                                             (line  460)
49690* iwithprefix:                           Preprocessor Options.
49691                                                             (line  444)
49692* iwithprefixbefore:                     Preprocessor Options.
49693                                                             (line  444)
49694* keep_private_externs:                  Darwin Options.     (line  196)
49695* l:                                     Link Options.       (line   26)
49696* L:                                     Directory Options.  (line   40)
49697* lobjc:                                 Link Options.       (line   53)
49698* M:                                     Preprocessor Options.
49699                                                             (line  185)
49700* m:                                     RS/6000 and PowerPC Options.
49701                                                             (line  581)
49702* m1:                                    SH Options.         (line    9)
49703* m10:                                   PDP-11 Options.     (line   29)
49704* m128bit-long-double:                   i386 and x86-64 Options.
49705                                                             (line  335)
49706* m16-bit:                               CRIS Options.       (line   64)
49707* m1reg-:                                Adapteva Epiphany Options.
49708                                                             (line  131)
49709* m2:                                    SH Options.         (line   12)
49710* m210:                                  MCore Options.      (line   43)
49711* m2a:                                   SH Options.         (line   30)
49712* m2a-nofpu:                             SH Options.         (line   18)
49713* m2a-single:                            SH Options.         (line   26)
49714* m2a-single-only:                       SH Options.         (line   22)
49715* m3:                                    SH Options.         (line   34)
49716* m31:                                   S/390 and zSeries Options.
49717                                                             (line   86)
49718* m32:                                   i386 and x86-64 Options.
49719                                                             (line  832)
49720* m32 <1>:                               RS/6000 and PowerPC Options.
49721                                                             (line  274)
49722* m32 <2>:                               SPARC Options.      (line  256)
49723* m32 <3>:                               TILE-Gx Options.    (line   23)
49724* m32 <4>:                               TILEPro Options.    (line   13)
49725* m32-bit:                               CRIS Options.       (line   64)
49726* m32bit-doubles:                        RX Options.         (line   10)
49727* m32r:                                  M32R/D Options.     (line   15)
49728* m32r2:                                 M32R/D Options.     (line    9)
49729* m32rx:                                 M32R/D Options.     (line   12)
49730* m340:                                  MCore Options.      (line   43)
49731* m3dnow:                                i386 and x86-64 Options.
49732                                                             (line  564)
49733* m3e:                                   SH Options.         (line   37)
49734* m4:                                    SH Options.         (line   51)
49735* m4-nofpu:                              SH Options.         (line   40)
49736* m4-single:                             SH Options.         (line   47)
49737* m4-single-only:                        SH Options.         (line   43)
49738* m40:                                   PDP-11 Options.     (line   23)
49739* m45:                                   PDP-11 Options.     (line   26)
49740* m4a:                                   SH Options.         (line   66)
49741* m4a-nofpu:                             SH Options.         (line   54)
49742* m4a-single:                            SH Options.         (line   62)
49743* m4a-single-only:                       SH Options.         (line   58)
49744* m4al:                                  SH Options.         (line   69)
49745* m4byte-functions:                      MCore Options.      (line   27)
49746* m5200:                                 M680x0 Options.     (line  144)
49747* m5206e:                                M680x0 Options.     (line  153)
49748* m528x:                                 M680x0 Options.     (line  157)
49749* m5307:                                 M680x0 Options.     (line  161)
49750* m5407:                                 M680x0 Options.     (line  165)
49751* m64:                                   i386 and x86-64 Options.
49752                                                             (line  832)
49753* m64 <1>:                               RS/6000 and PowerPC Options.
49754                                                             (line  274)
49755* m64 <2>:                               S/390 and zSeries Options.
49756                                                             (line   86)
49757* m64 <3>:                               SPARC Options.      (line  256)
49758* m64 <4>:                               TILE-Gx Options.    (line   23)
49759* m64bit-doubles:                        RX Options.         (line   10)
49760* m68000:                                M680x0 Options.     (line   93)
49761* m68010:                                M680x0 Options.     (line  101)
49762* m68020:                                M680x0 Options.     (line  107)
49763* m68020-40:                             M680x0 Options.     (line  175)
49764* m68020-60:                             M680x0 Options.     (line  184)
49765* m68030:                                M680x0 Options.     (line  112)
49766* m68040:                                M680x0 Options.     (line  117)
49767* m68060:                                M680x0 Options.     (line  126)
49768* m68881:                                M680x0 Options.     (line  194)
49769* m8-bit:                                CRIS Options.       (line   64)
49770* m8byte-align:                          V850 Options.       (line  170)
49771* m96bit-long-double:                    i386 and x86-64 Options.
49772                                                             (line  335)
49773* mabi:                                  ARM Options.        (line   10)
49774* mabi <1>:                              i386 and x86-64 Options.
49775                                                             (line  714)
49776* mabi <2>:                              RS/6000 and PowerPC Options.
49777                                                             (line  608)
49778* mabi=32:                               MIPS Options.       (line  130)
49779* mabi=64:                               MIPS Options.       (line  130)
49780* mabi=eabi:                             MIPS Options.       (line  130)
49781* mabi=elfv1:                            RS/6000 and PowerPC Options.
49782                                                             (line  629)
49783* mabi=elfv2:                            RS/6000 and PowerPC Options.
49784                                                             (line  635)
49785* mabi=gnu:                              MMIX Options.       (line   20)
49786* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
49787                                                             (line  621)
49788* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
49789                                                             (line  625)
49790* mabi=mmixware:                         MMIX Options.       (line   20)
49791* mabi=n32:                              MIPS Options.       (line  130)
49792* mabi=no-spe:                           RS/6000 and PowerPC Options.
49793                                                             (line  618)
49794* mabi=o64:                              MIPS Options.       (line  130)
49795* mabi=spe:                              RS/6000 and PowerPC Options.
49796                                                             (line  613)
49797* mabicalls:                             MIPS Options.       (line  154)
49798* mabort-on-noreturn:                    ARM Options.        (line  184)
49799* mabsdiff:                              MeP Options.        (line    7)
49800* mabshi:                                PDP-11 Options.     (line   55)
49801* mac0:                                  PDP-11 Options.     (line   16)
49802* macc-4:                                FRV Options.        (line  139)
49803* macc-8:                                FRV Options.        (line  143)
49804* maccumulate-args:                      AVR Options.        (line  137)
49805* maccumulate-outgoing-args:             i386 and x86-64 Options.
49806                                                             (line  737)
49807* maccumulate-outgoing-args <1>:         SH Options.         (line  325)
49808* maddress-mode=long:                    i386 and x86-64 Options.
49809                                                             (line  875)
49810* maddress-mode=short:                   i386 and x86-64 Options.
49811                                                             (line  880)
49812* maddress-space-conversion:             SPU Options.        (line   68)
49813* mads:                                  RS/6000 and PowerPC Options.
49814                                                             (line  663)
49815* maix-struct-return:                    RS/6000 and PowerPC Options.
49816                                                             (line  601)
49817* maix32:                                RS/6000 and PowerPC Options.
49818                                                             (line  312)
49819* maix64:                                RS/6000 and PowerPC Options.
49820                                                             (line  312)
49821* malign-300:                            H8/300 Options.     (line   41)
49822* malign-double:                         i386 and x86-64 Options.
49823                                                             (line  320)
49824* malign-int:                            M680x0 Options.     (line  263)
49825* malign-labels:                         FRV Options.        (line  128)
49826* malign-loops:                          M32R/D Options.     (line   73)
49827* malign-natural:                        RS/6000 and PowerPC Options.
49828                                                             (line  350)
49829* malign-power:                          RS/6000 and PowerPC Options.
49830                                                             (line  350)
49831* mall-opts:                             MeP Options.        (line   11)
49832* malloc-cc:                             FRV Options.        (line   31)
49833* maltivec:                              RS/6000 and PowerPC Options.
49834                                                             (line  132)
49835* maltivec=be:                           RS/6000 and PowerPC Options.
49836                                                             (line  148)
49837* maltivec=le:                           RS/6000 and PowerPC Options.
49838                                                             (line  158)
49839* mam33:                                 MN10300 Options.    (line   17)
49840* mam33-2:                               MN10300 Options.    (line   24)
49841* mam34:                                 MN10300 Options.    (line   27)
49842* mandroid:                              GNU/Linux Options.  (line   21)
49843* mapcs:                                 ARM Options.        (line   22)
49844* mapcs-frame:                           ARM Options.        (line   14)
49845* mapp-regs:                             SPARC Options.      (line   10)
49846* mapp-regs <1>:                         V850 Options.       (line  181)
49847* march:                                 AArch64 Options.    (line   55)
49848* march <1>:                             ARM Options.        (line   75)
49849* march <2>:                             C6X Options.        (line    7)
49850* march <3>:                             CRIS Options.       (line   10)
49851* march <4>:                             HPPA Options.       (line    9)
49852* march <5>:                             HPPA Options.       (line  161)
49853* march <6>:                             i386 and x86-64 Options.
49854                                                             (line   10)
49855* march <7>:                             M680x0 Options.     (line   12)
49856* march <8>:                             MIPS Options.       (line   14)
49857* march <9>:                             S/390 and zSeries Options.
49858                                                             (line  114)
49859* marm:                                  ARM Options.        (line  248)
49860* mas100-syntax:                         RX Options.         (line   76)
49861* masm=DIALECT:                          i386 and x86-64 Options.
49862                                                             (line  276)
49863* matomic-model=MODEL:                   SH Options.         (line  144)
49864* matomic-updates:                       SPU Options.        (line   83)
49865* mauto-pic:                             IA-64 Options.      (line   50)
49866* maverage:                              MeP Options.        (line   16)
49867* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
49868                                                             (line  420)
49869* max-vect-align:                        Adapteva Epiphany Options.
49870                                                             (line  119)
49871* mb:                                    SH Options.         (line   74)
49872* mbackchain:                            S/390 and zSeries Options.
49873                                                             (line   35)
49874* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
49875* mbase-addresses:                       MMIX Options.       (line   53)
49876* mbased=:                               MeP Options.        (line   20)
49877* mbcopy:                                PDP-11 Options.     (line   36)
49878* mbcopy-builtin:                        PDP-11 Options.     (line   32)
49879* mbig:                                  RS/6000 and PowerPC Options.
49880                                                             (line  500)
49881* mbig-endian:                           AArch64 Options.    (line    9)
49882* mbig-endian <1>:                       ARM Options.        (line   62)
49883* mbig-endian <2>:                       C6X Options.        (line   13)
49884* mbig-endian <3>:                       IA-64 Options.      (line    9)
49885* mbig-endian <4>:                       MCore Options.      (line   39)
49886* mbig-endian <5>:                       MicroBlaze Options. (line   57)
49887* mbig-endian <6>:                       RS/6000 and PowerPC Options.
49888                                                             (line  500)
49889* mbig-endian-data:                      RX Options.         (line   42)
49890* mbig-switch:                           HPPA Options.       (line   23)
49891* mbig-switch <1>:                       V850 Options.       (line  176)
49892* mbigtable:                             SH Options.         (line   89)
49893* mbionic:                               GNU/Linux Options.  (line   17)
49894* mbit-align:                            RS/6000 and PowerPC Options.
49895                                                             (line  452)
49896* mbit-ops:                              CR16 Options.       (line   25)
49897* mbitfield:                             M680x0 Options.     (line  231)
49898* mbitops:                               MeP Options.        (line   26)
49899* mbitops <1>:                           SH Options.         (line   93)
49900* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
49901                                                             (line  733)
49902* mbranch-cheap:                         PDP-11 Options.     (line   65)
49903* mbranch-cost:                          Adapteva Epiphany Options.
49904                                                             (line   18)
49905* mbranch-cost <1>:                      AVR Options.        (line  152)
49906* mbranch-cost <2>:                      MIPS Options.       (line  625)
49907* mbranch-cost=NUM:                      SH Options.         (line  389)
49908* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
49909* mbranch-expensive:                     PDP-11 Options.     (line   61)
49910* mbranch-hints:                         SPU Options.        (line   29)
49911* mbranch-likely:                        MIPS Options.       (line  632)
49912* mbranch-predict:                       MMIX Options.       (line   48)
49913* mbss-plt:                              RS/6000 and PowerPC Options.
49914                                                             (line  185)
49915* mbuild-constants:                      DEC Alpha Options.  (line  141)
49916* mbwx:                                  DEC Alpha Options.  (line  163)
49917* mc68000:                               M680x0 Options.     (line   93)
49918* mc68020:                               M680x0 Options.     (line  107)
49919* mc=:                                   MeP Options.        (line   31)
49920* mcache-size:                           SPU Options.        (line   75)
49921* mcall-eabi:                            RS/6000 and PowerPC Options.
49922                                                             (line  575)
49923* mcall-freebsd:                         RS/6000 and PowerPC Options.
49924                                                             (line  589)
49925* mcall-linux:                           RS/6000 and PowerPC Options.
49926                                                             (line  585)
49927* mcall-netbsd:                          RS/6000 and PowerPC Options.
49928                                                             (line  593)
49929* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
49930                                                             (line  597)
49931* mcall-prologues:                       AVR Options.        (line  157)
49932* mcall-sysv:                            RS/6000 and PowerPC Options.
49933                                                             (line  567)
49934* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
49935                                                             (line  575)
49936* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
49937                                                             (line  578)
49938* mcallee-super-interworking:            ARM Options.        (line  267)
49939* mcaller-super-interworking:            ARM Options.        (line  274)
49940* mcallgraph-data:                       MCore Options.      (line   31)
49941* mcbcond:                               SPARC Options.      (line  223)
49942* mcbranchdi:                            SH Options.         (line  404)
49943* mcc-init:                              CRIS Options.       (line   42)
49944* mcfv4e:                                M680x0 Options.     (line  169)
49945* mcheck-zero-division:                  MIPS Options.       (line  439)
49946* mcix:                                  DEC Alpha Options.  (line  163)
49947* mcld:                                  i386 and x86-64 Options.
49948                                                             (line  587)
49949* mclip:                                 MeP Options.        (line   35)
49950* mcmodel:                               SPARC Options.      (line  261)
49951* mcmodel=kernel:                        i386 and x86-64 Options.
49952                                                             (line  859)
49953* mcmodel=large:                         AArch64 Options.    (line   33)
49954* mcmodel=large <1>:                     i386 and x86-64 Options.
49955                                                             (line  871)
49956* mcmodel=large <2>:                     RS/6000 and PowerPC Options.
49957                                                             (line  126)
49958* mcmodel=large <3>:                     TILE-Gx Options.    (line   14)
49959* mcmodel=medium:                        i386 and x86-64 Options.
49960                                                             (line  864)
49961* mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
49962                                                             (line  122)
49963* mcmodel=small:                         AArch64 Options.    (line   27)
49964* mcmodel=small <1>:                     i386 and x86-64 Options.
49965                                                             (line  853)
49966* mcmodel=small <2>:                     RS/6000 and PowerPC Options.
49967                                                             (line  118)
49968* mcmodel=small <3>:                     TILE-Gx Options.    (line    9)
49969* mcmodel=tiny:                          AArch64 Options.    (line   20)
49970* mcmove:                                Adapteva Epiphany Options.
49971                                                             (line   23)
49972* mcmpb:                                 RS/6000 and PowerPC Options.
49973                                                             (line   27)
49974* mcmpeqdi:                              SH Options.         (line  407)
49975* mcode-readable:                        MIPS Options.       (line  399)
49976* mcompat-align-parm:                    RS/6000 and PowerPC Options.
49977                                                             (line  889)
49978* mcond-exec:                            FRV Options.        (line  187)
49979* mcond-move:                            FRV Options.        (line  159)
49980* mconfig=:                              MeP Options.        (line   39)
49981* mconsole:                              i386 and x86-64 Windows Options.
49982                                                             (line    9)
49983* mconst-align:                          CRIS Options.       (line   55)
49984* mconst16:                              Xtensa Options.     (line   10)
49985* mconstant-gp:                          IA-64 Options.      (line   46)
49986* mcop:                                  MeP Options.        (line   48)
49987* mcop32:                                MeP Options.        (line   53)
49988* mcop64:                                MeP Options.        (line   56)
49989* mcorea:                                Blackfin Options.   (line  156)
49990* mcoreb:                                Blackfin Options.   (line  163)
49991* mcpu:                                  AArch64 Options.    (line   69)
49992* mcpu <1>:                              ARM Options.        (line  124)
49993* mcpu <2>:                              CRIS Options.       (line   10)
49994* mcpu <3>:                              DEC Alpha Options.  (line  215)
49995* mcpu <4>:                              FRV Options.        (line  258)
49996* mcpu <5>:                              i386 and x86-64 Options.
49997                                                             (line  224)
49998* mcpu <6>:                              M680x0 Options.     (line   28)
49999* mcpu <7>:                              picoChip Options.   (line    9)
50000* mcpu <8>:                              RS/6000 and PowerPC Options.
50001                                                             (line   68)
50002* mcpu <9>:                              SPARC Options.      (line  101)
50003* mcpu <10>:                             TILE-Gx Options.    (line   18)
50004* mcpu <11>:                             TILEPro Options.    (line    9)
50005* mcpu32:                                M680x0 Options.     (line  135)
50006* mcpu=:                                 Blackfin Options.   (line    7)
50007* mcpu= <1>:                             M32C Options.       (line    7)
50008* mcpu= <2>:                             MicroBlaze Options. (line   20)
50009* mcr16c:                                CR16 Options.       (line   14)
50010* mcr16cplus:                            CR16 Options.       (line   14)
50011* mcrc32:                                i386 and x86-64 Options.
50012                                                             (line  634)
50013* mcrypto:                               RS/6000 and PowerPC Options.
50014                                                             (line  220)
50015* mcsync-anomaly:                        Blackfin Options.   (line   59)
50016* mcx16:                                 i386 and x86-64 Options.
50017                                                             (line  611)
50018* MD:                                    Preprocessor Options.
50019                                                             (line  276)
50020* mdalign:                               SH Options.         (line   80)
50021* mdata-align:                           CRIS Options.       (line   55)
50022* mdata-model:                           CR16 Options.       (line   28)
50023* mdc:                                   MeP Options.        (line   62)
50024* mdebug:                                M32R/D Options.     (line   69)
50025* mdebug <1>:                            S/390 and zSeries Options.
50026                                                             (line  110)
50027* mdebug-main=PREFIX:                    VMS Options.        (line   13)
50028* mdec-asm:                              PDP-11 Options.     (line   72)
50029* mdirect-move:                          RS/6000 and PowerPC Options.
50030                                                             (line  226)
50031* mdisable-callt:                        V850 Options.       (line   92)
50032* mdisable-fpregs:                       HPPA Options.       (line   33)
50033* mdisable-indexing:                     HPPA Options.       (line   39)
50034* mdiv:                                  M680x0 Options.     (line  206)
50035* mdiv <1>:                              MCore Options.      (line   15)
50036* mdiv <2>:                              MeP Options.        (line   65)
50037* mdiv=STRATEGY:                         SH Options.         (line  236)
50038* mdivide-breaks:                        MIPS Options.       (line  445)
50039* mdivide-enabled:                       LM32 Options.       (line   12)
50040* mdivide-traps:                         MIPS Options.       (line  445)
50041* mdivsi3_libfunc=NAME:                  SH Options.         (line  331)
50042* mdll:                                  i386 and x86-64 Windows Options.
50043                                                             (line   16)
50044* mdlmzb:                                RS/6000 and PowerPC Options.
50045                                                             (line  445)
50046* mdmx:                                  MIPS Options.       (line  289)
50047* mdouble:                               FRV Options.        (line   48)
50048* mdouble-float:                         MIPS Options.       (line  247)
50049* mdouble-float <1>:                     RS/6000 and PowerPC Options.
50050                                                             (line  368)
50051* mdsp:                                  MIPS Options.       (line  266)
50052* mdspr2:                                MIPS Options.       (line  272)
50053* mdual-nops:                            SPU Options.        (line   95)
50054* mdwarf2-asm:                           IA-64 Options.      (line   94)
50055* mdword:                                FRV Options.        (line   40)
50056* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
50057                                                             (line  505)
50058* mea32:                                 SPU Options.        (line   60)
50059* mea64:                                 SPU Options.        (line   60)
50060* meabi:                                 RS/6000 and PowerPC Options.
50061                                                             (line  682)
50062* mearly-stop-bits:                      IA-64 Options.      (line  100)
50063* meb:                                   MeP Options.        (line   68)
50064* meb <1>:                               Moxie Options.      (line    7)
50065* meb <2>:                               Score Options.      (line    9)
50066* mel:                                   MeP Options.        (line   71)
50067* mel <1>:                               Moxie Options.      (line   11)
50068* mel <2>:                               Score Options.      (line   12)
50069* melf:                                  CRIS Options.       (line   87)
50070* melf <1>:                              MMIX Options.       (line   43)
50071* memb:                                  RS/6000 and PowerPC Options.
50072                                                             (line  677)
50073* membedded-data:                        MIPS Options.       (line  386)
50074* memregs=:                              M32C Options.       (line   21)
50075* mep:                                   V850 Options.       (line   16)
50076* mepsilon:                              MMIX Options.       (line   15)
50077* merror-reloc:                          SPU Options.        (line   10)
50078* mesa:                                  S/390 and zSeries Options.
50079                                                             (line   94)
50080* metrax100:                             CRIS Options.       (line   27)
50081* metrax4:                               CRIS Options.       (line   27)
50082* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
50083* mexplicit-relocs <1>:                  MIPS Options.       (line  430)
50084* mexr:                                  H8/300 Options.     (line   28)
50085* mextern-sdata:                         MIPS Options.       (line  349)
50086* MF:                                    Preprocessor Options.
50087                                                             (line  220)
50088* mfast-fp:                              Blackfin Options.   (line  132)
50089* mfast-indirect-calls:                  HPPA Options.       (line   51)
50090* mfaster-structs:                       SPARC Options.      (line   91)
50091* mfdpic:                                FRV Options.        (line   72)
50092* mfentry:                               i386 and x86-64 Options.
50093                                                             (line  809)
50094* mfix:                                  DEC Alpha Options.  (line  163)
50095* mfix-24k:                              MIPS Options.       (line  496)
50096* mfix-and-continue:                     Darwin Options.     (line  104)
50097* mfix-at697f:                           SPARC Options.      (line  243)
50098* mfix-cortex-m3-ldrd:                   ARM Options.        (line  307)
50099* mfix-r10000:                           MIPS Options.       (line  518)
50100* mfix-r4000:                            MIPS Options.       (line  502)
50101* mfix-r4400:                            MIPS Options.       (line  512)
50102* mfix-sb1:                              MIPS Options.       (line  549)
50103* mfix-ut699:                            SPARC Options.      (line  248)
50104* mfix-vr4120:                           MIPS Options.       (line  529)
50105* mfix-vr4130:                           MIPS Options.       (line  542)
50106* mfixed-cc:                             FRV Options.        (line   35)
50107* mfixed-range:                          HPPA Options.       (line   58)
50108* mfixed-range <1>:                      IA-64 Options.      (line  105)
50109* mfixed-range <2>:                      SH Options.         (line  338)
50110* mfixed-range <3>:                      SPU Options.        (line   52)
50111* mflat:                                 SPARC Options.      (line   22)
50112* mflip-mips16:                          MIPS Options.       (line  110)
50113* mfloat-abi:                            ARM Options.        (line   42)
50114* mfloat-gprs:                           RS/6000 and PowerPC Options.
50115                                                             (line  257)
50116* mfloat-ieee:                           DEC Alpha Options.  (line  171)
50117* mfloat-vax:                            DEC Alpha Options.  (line  171)
50118* mfloat32:                              PDP-11 Options.     (line   52)
50119* mfloat64:                              PDP-11 Options.     (line   48)
50120* mflush-func:                           MIPS Options.       (line  616)
50121* mflush-func=NAME:                      M32R/D Options.     (line   93)
50122* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
50123* mfmaf:                                 SPARC Options.      (line  237)
50124* mfmovd:                                SH Options.         (line   96)
50125* mforce-no-pic:                         Xtensa Options.     (line   41)
50126* mfp-exceptions:                        MIPS Options.       (line  643)
50127* mfp-mode:                              Adapteva Epiphany Options.
50128                                                             (line   71)
50129* mfp-reg:                               DEC Alpha Options.  (line   25)
50130* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
50131* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
50132* mfp16-format:                          ARM Options.        (line  164)
50133* mfp32:                                 MIPS Options.       (line  220)
50134* mfp64:                                 MIPS Options.       (line  223)
50135* mfpmath:                               Optimize Options.   (line 1893)
50136* mfpmath <1>:                           i386 and x86-64 Options.
50137                                                             (line  227)
50138* mfpr-32:                               FRV Options.        (line   15)
50139* mfpr-64:                               FRV Options.        (line   19)
50140* mfprnd:                                RS/6000 and PowerPC Options.
50141                                                             (line   27)
50142* mfpu:                                  ARM Options.        (line  144)
50143* mfpu <1>:                              PDP-11 Options.     (line    9)
50144* mfpu <2>:                              RS/6000 and PowerPC Options.
50145                                                             (line  376)
50146* mfpu <3>:                              SPARC Options.      (line   34)
50147* mfriz:                                 RS/6000 and PowerPC Options.
50148                                                             (line  860)
50149* mfsca:                                 SH Options.         (line  421)
50150* mfsrra:                                SH Options.         (line  430)
50151* mfull-toc:                             RS/6000 and PowerPC Options.
50152                                                             (line  285)
50153* mfused-madd:                           IA-64 Options.      (line   88)
50154* mfused-madd <1>:                       MIPS Options.       (line  479)
50155* mfused-madd <2>:                       RS/6000 and PowerPC Options.
50156                                                             (line  429)
50157* mfused-madd <3>:                       S/390 and zSeries Options.
50158                                                             (line  135)
50159* mfused-madd <4>:                       SH Options.         (line  412)
50160* mfused-madd <5>:                       Xtensa Options.     (line   19)
50161* MG:                                    Preprocessor Options.
50162                                                             (line  229)
50163* mg:                                    VAX Options.        (line   17)
50164* mgas:                                  HPPA Options.       (line   74)
50165* mgcc-abi:                              V850 Options.       (line  148)
50166* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
50167                                                             (line  173)
50168* mgeneral-regs-only:                    AArch64 Options.    (line   13)
50169* mgettrcost=NUMBER:                     SH Options.         (line  355)
50170* mghs:                                  V850 Options.       (line  127)
50171* mglibc:                                GNU/Linux Options.  (line    9)
50172* mgnu:                                  VAX Options.        (line   13)
50173* mgnu-as:                               IA-64 Options.      (line   18)
50174* mgnu-ld:                               HPPA Options.       (line  110)
50175* mgnu-ld <1>:                           IA-64 Options.      (line   23)
50176* mgotplt:                               CRIS Options.       (line   81)
50177* mgp32:                                 MIPS Options.       (line  214)
50178* mgp64:                                 MIPS Options.       (line  217)
50179* mgpopt:                                MIPS Options.       (line  371)
50180* mgpr-32:                               FRV Options.        (line    7)
50181* mgpr-64:                               FRV Options.        (line   11)
50182* mgprel-ro:                             FRV Options.        (line   99)
50183* mh:                                    H8/300 Options.     (line   14)
50184* mhalf-reg-file:                        Adapteva Epiphany Options.
50185                                                             (line    9)
50186* mhard-dfp:                             RS/6000 and PowerPC Options.
50187                                                             (line   27)
50188* mhard-dfp <1>:                         S/390 and zSeries Options.
50189                                                             (line   20)
50190* mhard-float:                           FRV Options.        (line   23)
50191* mhard-float <1>:                       M680x0 Options.     (line  194)
50192* mhard-float <2>:                       MicroBlaze Options. (line   10)
50193* mhard-float <3>:                       MIPS Options.       (line  226)
50194* mhard-float <4>:                       RS/6000 and PowerPC Options.
50195                                                             (line  362)
50196* mhard-float <5>:                       S/390 and zSeries Options.
50197                                                             (line   11)
50198* mhard-float <6>:                       SPARC Options.      (line   34)
50199* mhard-float <7>:                       V850 Options.       (line  113)
50200* mhard-quad-float:                      SPARC Options.      (line   55)
50201* mhardlit:                              MCore Options.      (line   10)
50202* mhint-max-distance:                    SPU Options.        (line  107)
50203* mhint-max-nops:                        SPU Options.        (line  101)
50204* mhitachi:                              SH Options.         (line  100)
50205* mhitachi <1>:                          SH Options.         (line  103)
50206* mhitachi <2>:                          SH Options.         (line  106)
50207* mhotpatch:                             S/390 and zSeries Options.
50208                                                             (line  171)
50209* mhp-ld:                                HPPA Options.       (line  122)
50210* micplb:                                Blackfin Options.   (line  177)
50211* mid-shared-library:                    Blackfin Options.   (line   80)
50212* mieee:                                 DEC Alpha Options.  (line   39)
50213* mieee <1>:                             SH Options.         (line  116)
50214* mieee-conformant:                      DEC Alpha Options.  (line  134)
50215* mieee-fp:                              i386 and x86-64 Options.
50216                                                             (line  282)
50217* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
50218* milp32:                                IA-64 Options.      (line  121)
50219* mimpure-text:                          Solaris 2 Options.  (line    9)
50220* mincoming-stack-boundary:              i386 and x86-64 Options.
50221                                                             (line  485)
50222* mindexed-addressing:                   SH Options.         (line  345)
50223* minline-all-stringops:                 i386 and x86-64 Options.
50224                                                             (line  757)
50225* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
50226* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
50227* minline-ic_invalidate:                 SH Options.         (line  125)
50228* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
50229* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
50230* minline-plt:                           Blackfin Options.   (line  137)
50231* minline-plt <1>:                       FRV Options.        (line   81)
50232* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
50233* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
50234* minline-stringops-dynamically:         i386 and x86-64 Options.
50235                                                             (line  764)
50236* minsert-sched-nops:                    RS/6000 and PowerPC Options.
50237                                                             (line  545)
50238* mint-register:                         RX Options.         (line  100)
50239* mint16:                                PDP-11 Options.     (line   40)
50240* mint32:                                CR16 Options.       (line   22)
50241* mint32 <1>:                            H8/300 Options.     (line   38)
50242* mint32 <2>:                            PDP-11 Options.     (line   44)
50243* mint8:                                 AVR Options.        (line  161)
50244* minterlink-mips16:                     MIPS Options.       (line  117)
50245* minvalid-symbols:                      SH Options.         (line  379)
50246* mio-volatile:                          MeP Options.        (line   74)
50247* mips1:                                 MIPS Options.       (line   77)
50248* mips16:                                MIPS Options.       (line  102)
50249* mips2:                                 MIPS Options.       (line   80)
50250* mips3:                                 MIPS Options.       (line   83)
50251* mips32:                                MIPS Options.       (line   89)
50252* mips32r2:                              MIPS Options.       (line   92)
50253* mips3d:                                MIPS Options.       (line  295)
50254* mips4:                                 MIPS Options.       (line   86)
50255* mips64:                                MIPS Options.       (line   95)
50256* mips64r2:                              MIPS Options.       (line   98)
50257* misel:                                 RS/6000 and PowerPC Options.
50258                                                             (line  191)
50259* misize:                                SH Options.         (line  137)
50260* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
50261* mivc2:                                 MeP Options.        (line   59)
50262* mjump-in-delay:                        HPPA Options.       (line   28)
50263* mkernel:                               Darwin Options.     (line   82)
50264* mknuthdiv:                             MMIX Options.       (line   32)
50265* ml:                                    MeP Options.        (line   78)
50266* ml <1>:                                SH Options.         (line   77)
50267* mlarge-data:                           DEC Alpha Options.  (line  187)
50268* mlarge-data-threshold:                 i386 and x86-64 Options.
50269                                                             (line  371)
50270* mlarge-mem:                            SPU Options.        (line   38)
50271* mlarge-text:                           DEC Alpha Options.  (line  205)
50272* mleadz:                                MeP Options.        (line   81)
50273* mleaf-id-shared-library:               Blackfin Options.   (line   91)
50274* mlibfuncs:                             MMIX Options.       (line   10)
50275* mlibrary-pic:                          FRV Options.        (line  135)
50276* mlinked-fp:                            FRV Options.        (line  116)
50277* mlinker-opt:                           HPPA Options.       (line   84)
50278* mlinux:                                CRIS Options.       (line   91)
50279* mlittle:                               RS/6000 and PowerPC Options.
50280                                                             (line  494)
50281* mlittle-endian:                        AArch64 Options.    (line   16)
50282* mlittle-endian <1>:                    ARM Options.        (line   58)
50283* mlittle-endian <2>:                    C6X Options.        (line   16)
50284* mlittle-endian <3>:                    IA-64 Options.      (line   13)
50285* mlittle-endian <4>:                    MCore Options.      (line   39)
50286* mlittle-endian <5>:                    MicroBlaze Options. (line   60)
50287* mlittle-endian <6>:                    RS/6000 and PowerPC Options.
50288                                                             (line  494)
50289* mlittle-endian-data:                   RX Options.         (line   42)
50290* mliw:                                  MN10300 Options.    (line   54)
50291* mllsc:                                 MIPS Options.       (line  252)
50292* mlocal-sdata:                          MIPS Options.       (line  337)
50293* mlong-calls:                           Adapteva Epiphany Options.
50294                                                             (line   55)
50295* mlong-calls <1>:                       ARM Options.        (line  189)
50296* mlong-calls <2>:                       Blackfin Options.   (line  120)
50297* mlong-calls <3>:                       FRV Options.        (line  122)
50298* mlong-calls <4>:                       MIPS Options.       (line  465)
50299* mlong-calls <5>:                       V850 Options.       (line   10)
50300* mlong-double-128:                      S/390 and zSeries Options.
50301                                                             (line   29)
50302* mlong-double-64:                       i386 and x86-64 Options.
50303                                                             (line  360)
50304* mlong-double-64 <1>:                   S/390 and zSeries Options.
50305                                                             (line   29)
50306* mlong-double-80:                       i386 and x86-64 Options.
50307                                                             (line  360)
50308* mlong-jumps:                           V850 Options.       (line  108)
50309* mlong-load-store:                      HPPA Options.       (line   65)
50310* mlong32:                               MIPS Options.       (line  312)
50311* mlong64:                               MIPS Options.       (line  307)
50312* mlongcall:                             RS/6000 and PowerPC Options.
50313                                                             (line  753)
50314* mlongcalls:                            Xtensa Options.     (line   72)
50315* mloop:                                 V850 Options.       (line  121)
50316* mlow-64k:                              Blackfin Options.   (line   69)
50317* mlp64:                                 IA-64 Options.      (line  121)
50318* MM:                                    Preprocessor Options.
50319                                                             (line  210)
50320* mm:                                    MeP Options.        (line   84)
50321* mmac:                                  CR16 Options.       (line    9)
50322* mmac <1>:                              Score Options.      (line   21)
50323* mmad:                                  MIPS Options.       (line  474)
50324* mmalloc64:                             VMS Options.        (line   17)
50325* mmax:                                  DEC Alpha Options.  (line  163)
50326* mmax-constant-size:                    RX Options.         (line   82)
50327* mmax-stack-frame:                      CRIS Options.       (line   23)
50328* mmcount-ra-address:                    MIPS Options.       (line  692)
50329* mmcu:                                  AVR Options.        (line    9)
50330* mmcu <1>:                              MIPS Options.       (line  304)
50331* MMD:                                   Preprocessor Options.
50332                                                             (line  292)
50333* mmedia:                                FRV Options.        (line   56)
50334* mmemcpy:                               MicroBlaze Options. (line   13)
50335* mmemcpy <1>:                           MIPS Options.       (line  459)
50336* mmemory-latency:                       DEC Alpha Options.  (line  268)
50337* mmemory-model:                         SPARC Options.      (line  289)
50338* mmfcrf:                                RS/6000 and PowerPC Options.
50339                                                             (line   27)
50340* mmfpgpr:                               RS/6000 and PowerPC Options.
50341                                                             (line   27)
50342* mminimal-toc:                          RS/6000 and PowerPC Options.
50343                                                             (line  285)
50344* mminmax:                               MeP Options.        (line   87)
50345* mmmx:                                  i386 and x86-64 Options.
50346                                                             (line  564)
50347* mmodel=large:                          M32R/D Options.     (line   33)
50348* mmodel=medium:                         M32R/D Options.     (line   27)
50349* mmodel=small:                          M32R/D Options.     (line   18)
50350* mmovbe:                                i386 and x86-64 Options.
50351                                                             (line  630)
50352* mmt:                                   MIPS Options.       (line  300)
50353* mmul:                                  RL78 Options.       (line   13)
50354* mmul-bug-workaround:                   CRIS Options.       (line   32)
50355* mmuladd:                               FRV Options.        (line   64)
50356* mmulhw:                                RS/6000 and PowerPC Options.
50357                                                             (line  438)
50358* mmult:                                 MeP Options.        (line   90)
50359* mmult-bug:                             MN10300 Options.    (line    9)
50360* mmulti-cond-exec:                      FRV Options.        (line  215)
50361* mmulticore:                            Blackfin Options.   (line  141)
50362* mmultiple:                             RS/6000 and PowerPC Options.
50363                                                             (line  388)
50364* mmvcle:                                S/390 and zSeries Options.
50365                                                             (line  104)
50366* mmvme:                                 RS/6000 and PowerPC Options.
50367                                                             (line  658)
50368* mn:                                    H8/300 Options.     (line   20)
50369* mnested-cond-exec:                     FRV Options.        (line  230)
50370* mnhwloop:                              Score Options.      (line   15)
50371* mno-3dnow:                             i386 and x86-64 Options.
50372                                                             (line  564)
50373* mno-4byte-functions:                   MCore Options.      (line   27)
50374* mno-8byte-align:                       V850 Options.       (line  170)
50375* mno-abicalls:                          MIPS Options.       (line  154)
50376* mno-abshi:                             PDP-11 Options.     (line   58)
50377* mno-ac0:                               PDP-11 Options.     (line   20)
50378* mno-address-space-conversion:          SPU Options.        (line   68)
50379* mno-align-double:                      i386 and x86-64 Options.
50380                                                             (line  320)
50381* mno-align-int:                         M680x0 Options.     (line  263)
50382* mno-align-loops:                       M32R/D Options.     (line   76)
50383* mno-align-stringops:                   i386 and x86-64 Options.
50384                                                             (line  752)
50385* mno-altivec:                           RS/6000 and PowerPC Options.
50386                                                             (line  132)
50387* mno-am33:                              MN10300 Options.    (line   20)
50388* mno-app-regs:                          SPARC Options.      (line   10)
50389* mno-app-regs <1>:                      V850 Options.       (line  185)
50390* mno-as100-syntax:                      RX Options.         (line   76)
50391* mno-atomic-updates:                    SPU Options.        (line   83)
50392* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
50393                                                             (line  420)
50394* mno-backchain:                         S/390 and zSeries Options.
50395                                                             (line   35)
50396* mno-base-addresses:                    MMIX Options.       (line   53)
50397* mno-bit-align:                         RS/6000 and PowerPC Options.
50398                                                             (line  452)
50399* mno-bitfield:                          M680x0 Options.     (line  227)
50400* mno-branch-likely:                     MIPS Options.       (line  632)
50401* mno-branch-predict:                    MMIX Options.       (line   48)
50402* mno-bwx:                               DEC Alpha Options.  (line  163)
50403* mno-callgraph-data:                    MCore Options.      (line   31)
50404* mno-cbcond:                            SPARC Options.      (line  223)
50405* mno-check-zero-division:               MIPS Options.       (line  439)
50406* mno-cix:                               DEC Alpha Options.  (line  163)
50407* mno-clearbss:                          MicroBlaze Options. (line   16)
50408* mno-cmpb:                              RS/6000 and PowerPC Options.
50409                                                             (line   27)
50410* mno-cond-exec:                         FRV Options.        (line  194)
50411* mno-cond-move:                         FRV Options.        (line  166)
50412* mno-const-align:                       CRIS Options.       (line   55)
50413* mno-const16:                           Xtensa Options.     (line   10)
50414* mno-crt0:                              MN10300 Options.    (line   43)
50415* mno-crt0 <1>:                          Moxie Options.      (line   14)
50416* mno-crypto:                            RS/6000 and PowerPC Options.
50417                                                             (line  220)
50418* mno-csync-anomaly:                     Blackfin Options.   (line   65)
50419* mno-data-align:                        CRIS Options.       (line   55)
50420* mno-debug:                             S/390 and zSeries Options.
50421                                                             (line  110)
50422* mno-direct-move:                       RS/6000 and PowerPC Options.
50423                                                             (line  226)
50424* mno-disable-callt:                     V850 Options.       (line   92)
50425* mno-div:                               M680x0 Options.     (line  206)
50426* mno-div <1>:                           MCore Options.      (line   15)
50427* mno-dlmzb:                             RS/6000 and PowerPC Options.
50428                                                             (line  445)
50429* mno-double:                            FRV Options.        (line   52)
50430* mno-dsp:                               MIPS Options.       (line  266)
50431* mno-dspr2:                             MIPS Options.       (line  272)
50432* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
50433* mno-dword:                             FRV Options.        (line   44)
50434* mno-eabi:                              RS/6000 and PowerPC Options.
50435                                                             (line  682)
50436* mno-early-stop-bits:                   IA-64 Options.      (line  100)
50437* mno-eflags:                            FRV Options.        (line  155)
50438* mno-embedded-data:                     MIPS Options.       (line  386)
50439* mno-ep:                                V850 Options.       (line   16)
50440* mno-epsilon:                           MMIX Options.       (line   15)
50441* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
50442* mno-explicit-relocs <1>:               MIPS Options.       (line  430)
50443* mno-exr:                               H8/300 Options.     (line   33)
50444* mno-extern-sdata:                      MIPS Options.       (line  349)
50445* mno-fancy-math-387:                    i386 and x86-64 Options.
50446                                                             (line  310)
50447* mno-faster-structs:                    SPARC Options.      (line   91)
50448* mno-fix:                               DEC Alpha Options.  (line  163)
50449* mno-fix-24k:                           MIPS Options.       (line  496)
50450* mno-fix-r10000:                        MIPS Options.       (line  518)
50451* mno-fix-r4000:                         MIPS Options.       (line  502)
50452* mno-fix-r4400:                         MIPS Options.       (line  512)
50453* mno-flat:                              SPARC Options.      (line   22)
50454* mno-float:                             MIPS Options.       (line  233)
50455* mno-float32:                           PDP-11 Options.     (line   48)
50456* mno-float64:                           PDP-11 Options.     (line   52)
50457* mno-flush-func:                        M32R/D Options.     (line   98)
50458* mno-flush-trap:                        M32R/D Options.     (line   90)
50459* mno-fmaf:                              SPARC Options.      (line  237)
50460* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
50461                                                             (line  285)
50462* mno-fp-regs:                           DEC Alpha Options.  (line   25)
50463* mno-fp-ret-in-387:                     i386 and x86-64 Options.
50464                                                             (line  300)
50465* mno-fprnd:                             RS/6000 and PowerPC Options.
50466                                                             (line   27)
50467* mno-fpu:                               SPARC Options.      (line   39)
50468* mno-fsca:                              SH Options.         (line  421)
50469* mno-fsrra:                             SH Options.         (line  430)
50470* mno-fused-madd:                        IA-64 Options.      (line   88)
50471* mno-fused-madd <1>:                    MIPS Options.       (line  479)
50472* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
50473                                                             (line  429)
50474* mno-fused-madd <3>:                    S/390 and zSeries Options.
50475                                                             (line  135)
50476* mno-fused-madd <4>:                    SH Options.         (line  412)
50477* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
50478* mno-gnu-as:                            IA-64 Options.      (line   18)
50479* mno-gnu-ld:                            IA-64 Options.      (line   23)
50480* mno-gotplt:                            CRIS Options.       (line   81)
50481* mno-gpopt:                             MIPS Options.       (line  371)
50482* mno-hard-dfp:                          RS/6000 and PowerPC Options.
50483                                                             (line   27)
50484* mno-hard-dfp <1>:                      S/390 and zSeries Options.
50485                                                             (line   20)
50486* mno-hardlit:                           MCore Options.      (line   10)
50487* mno-id-shared-library:                 Blackfin Options.   (line   87)
50488* mno-ieee-fp:                           i386 and x86-64 Options.
50489                                                             (line  282)
50490* mno-inline-float-divide:               IA-64 Options.      (line   62)
50491* mno-inline-int-divide:                 IA-64 Options.      (line   73)
50492* mno-inline-sqrt:                       IA-64 Options.      (line   84)
50493* mno-int16:                             PDP-11 Options.     (line   44)
50494* mno-int32:                             PDP-11 Options.     (line   40)
50495* mno-interlink-mips16:                  MIPS Options.       (line  117)
50496* mno-interrupts:                        AVR Options.        (line  167)
50497* mno-isel:                              RS/6000 and PowerPC Options.
50498                                                             (line  191)
50499* mno-knuthdiv:                          MMIX Options.       (line   32)
50500* mno-leaf-id-shared-library:            Blackfin Options.   (line   97)
50501* mno-libfuncs:                          MMIX Options.       (line   10)
50502* mno-llsc:                              MIPS Options.       (line  252)
50503* mno-local-sdata:                       MIPS Options.       (line  337)
50504* mno-long-calls:                        ARM Options.        (line  189)
50505* mno-long-calls <1>:                    Blackfin Options.   (line  120)
50506* mno-long-calls <2>:                    HPPA Options.       (line  135)
50507* mno-long-calls <3>:                    MIPS Options.       (line  465)
50508* mno-long-calls <4>:                    V850 Options.       (line   10)
50509* mno-long-jumps:                        V850 Options.       (line  108)
50510* mno-longcall:                          RS/6000 and PowerPC Options.
50511                                                             (line  753)
50512* mno-longcalls:                         Xtensa Options.     (line   72)
50513* mno-low-64k:                           Blackfin Options.   (line   73)
50514* mno-lsim:                              FR30 Options.       (line   14)
50515* mno-lsim <1>:                          MCore Options.      (line   46)
50516* mno-mad:                               MIPS Options.       (line  474)
50517* mno-max:                               DEC Alpha Options.  (line  163)
50518* mno-mcount-ra-address:                 MIPS Options.       (line  692)
50519* mno-mcu:                               MIPS Options.       (line  304)
50520* mno-mdmx:                              MIPS Options.       (line  289)
50521* mno-media:                             FRV Options.        (line   60)
50522* mno-memcpy:                            MIPS Options.       (line  459)
50523* mno-mfcrf:                             RS/6000 and PowerPC Options.
50524                                                             (line   27)
50525* mno-mfpgpr:                            RS/6000 and PowerPC Options.
50526                                                             (line   27)
50527* mno-mips16:                            MIPS Options.       (line  102)
50528* mno-mips3d:                            MIPS Options.       (line  295)
50529* mno-mmx:                               i386 and x86-64 Options.
50530                                                             (line  564)
50531* mno-mt:                                MIPS Options.       (line  300)
50532* mno-mul-bug-workaround:                CRIS Options.       (line   32)
50533* mno-muladd:                            FRV Options.        (line   68)
50534* mno-mulhw:                             RS/6000 and PowerPC Options.
50535                                                             (line  438)
50536* mno-mult-bug:                          MN10300 Options.    (line   13)
50537* mno-multi-cond-exec:                   FRV Options.        (line  223)
50538* mno-multiple:                          RS/6000 and PowerPC Options.
50539                                                             (line  388)
50540* mno-mvcle:                             S/390 and zSeries Options.
50541                                                             (line  104)
50542* mno-nested-cond-exec:                  FRV Options.        (line  237)
50543* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   43)
50544* mno-optimize-membar:                   FRV Options.        (line  249)
50545* mno-opts:                              MeP Options.        (line   93)
50546* mno-pack:                              FRV Options.        (line  151)
50547* mno-packed-stack:                      S/390 and zSeries Options.
50548                                                             (line   54)
50549* mno-paired:                            RS/6000 and PowerPC Options.
50550                                                             (line  205)
50551* mno-paired-single:                     MIPS Options.       (line  283)
50552* mno-pic:                               IA-64 Options.      (line   26)
50553* mno-pid:                               RX Options.         (line  117)
50554* mno-plt:                               MIPS Options.       (line  181)
50555* mno-popc:                              SPARC Options.      (line  230)
50556* mno-popcntb:                           RS/6000 and PowerPC Options.
50557                                                             (line   27)
50558* mno-popcntd:                           RS/6000 and PowerPC Options.
50559                                                             (line   27)
50560* mno-postinc:                           Adapteva Epiphany Options.
50561                                                             (line  109)
50562* mno-postmodify:                        Adapteva Epiphany Options.
50563                                                             (line  109)
50564* mno-power8-fusion:                     RS/6000 and PowerPC Options.
50565                                                             (line  232)
50566* mno-power8-vector:                     RS/6000 and PowerPC Options.
50567                                                             (line  238)
50568* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
50569                                                             (line   27)
50570* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
50571                                                             (line   27)
50572* mno-powerpc64:                         RS/6000 and PowerPC Options.
50573                                                             (line   27)
50574* mno-prolog-function:                   V850 Options.       (line   23)
50575* mno-prologue-epilogue:                 CRIS Options.       (line   71)
50576* mno-prototype:                         RS/6000 and PowerPC Options.
50577                                                             (line  642)
50578* mno-push-args:                         i386 and x86-64 Options.
50579                                                             (line  730)
50580* mno-quad-memory:                       RS/6000 and PowerPC Options.
50581                                                             (line  245)
50582* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
50583                                                             (line  251)
50584* mno-red-zone:                          i386 and x86-64 Options.
50585                                                             (line  845)
50586* mno-register-names:                    IA-64 Options.      (line   37)
50587* mno-regnames:                          RS/6000 and PowerPC Options.
50588                                                             (line  747)
50589* mno-relax:                             V850 Options.       (line  103)
50590* mno-relax-immediate:                   MCore Options.      (line   19)
50591* mno-relocatable:                       RS/6000 and PowerPC Options.
50592                                                             (line  468)
50593* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
50594                                                             (line  479)
50595* mno-round-nearest:                     Adapteva Epiphany Options.
50596                                                             (line   51)
50597* mno-rtd:                               M680x0 Options.     (line  258)
50598* mno-scc:                               FRV Options.        (line  180)
50599* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
50600* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
50601* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
50602* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
50603* mno-sched-control-spec:                IA-64 Options.      (line  140)
50604* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
50605* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
50606* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
50607* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
50608* mno-sched-prolog:                      ARM Options.        (line   33)
50609* mno-sdata:                             IA-64 Options.      (line   42)
50610* mno-sdata <1>:                         RS/6000 and PowerPC Options.
50611                                                             (line  728)
50612* mno-sep-data:                          Blackfin Options.   (line  115)
50613* mno-serialize-volatile:                Xtensa Options.     (line   35)
50614* mno-short:                             M680x0 Options.     (line  222)
50615* mno-side-effects:                      CRIS Options.       (line   46)
50616* mno-sim:                               RX Options.         (line   71)
50617* mno-single-exit:                       MMIX Options.       (line   65)
50618* mno-slow-bytes:                        MCore Options.      (line   35)
50619* mno-small-exec:                        S/390 and zSeries Options.
50620                                                             (line   79)
50621* mno-smartmips:                         MIPS Options.       (line  279)
50622* mno-soft-cmpsf:                        Adapteva Epiphany Options.
50623                                                             (line   29)
50624* mno-soft-float:                        DEC Alpha Options.  (line   10)
50625* mno-space-regs:                        HPPA Options.       (line   44)
50626* mno-spe:                               RS/6000 and PowerPC Options.
50627                                                             (line  200)
50628* mno-specld-anomaly:                    Blackfin Options.   (line   55)
50629* mno-split-addresses:                   MIPS Options.       (line  424)
50630* mno-sse:                               i386 and x86-64 Options.
50631                                                             (line  564)
50632* mno-stack-align:                       CRIS Options.       (line   55)
50633* mno-stack-bias:                        SPARC Options.      (line  313)
50634* mno-strict-align:                      M680x0 Options.     (line  283)
50635* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
50636                                                             (line  463)
50637* mno-string:                            RS/6000 and PowerPC Options.
50638                                                             (line  399)
50639* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
50640                                                             (line  285)
50641* mno-sym32:                             MIPS Options.       (line  322)
50642* mno-target-align:                      Xtensa Options.     (line   59)
50643* mno-text-section-literals:             Xtensa Options.     (line   47)
50644* mno-tls-markers:                       RS/6000 and PowerPC Options.
50645                                                             (line  785)
50646* mno-toc:                               RS/6000 and PowerPC Options.
50647                                                             (line  488)
50648* mno-toplevel-symbols:                  MMIX Options.       (line   39)
50649* mno-tpf-trace:                         S/390 and zSeries Options.
50650                                                             (line  129)
50651* mno-unaligned-access:                  ARM Options.        (line  314)
50652* mno-unaligned-doubles:                 SPARC Options.      (line   73)
50653* mno-uninit-const-in-rodata:            MIPS Options.       (line  394)
50654* mno-update:                            RS/6000 and PowerPC Options.
50655                                                             (line  410)
50656* mno-user-mode:                         SPARC Options.      (line   85)
50657* mno-v8plus:                            SPARC Options.      (line  194)
50658* mno-vect-double:                       Adapteva Epiphany Options.
50659                                                             (line  115)
50660* mno-vis:                               SPARC Options.      (line  201)
50661* mno-vis2:                              SPARC Options.      (line  207)
50662* mno-vis3:                              SPARC Options.      (line  215)
50663* mno-vliw-branch:                       FRV Options.        (line  208)
50664* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
50665* mno-vrsave:                            RS/6000 and PowerPC Options.
50666                                                             (line  170)
50667* mno-vsx:                               RS/6000 and PowerPC Options.
50668                                                             (line  214)
50669* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
50670* mno-wide-bitfields:                    MCore Options.      (line   23)
50671* mno-xgot:                              M680x0 Options.     (line  315)
50672* mno-xgot <1>:                          MIPS Options.       (line  191)
50673* mno-xl-compat:                         RS/6000 and PowerPC Options.
50674                                                             (line  320)
50675* mno-zdcbranch:                         SH Options.         (line  396)
50676* mno-zero-extend:                       MMIX Options.       (line   26)
50677* mnobitfield:                           M680x0 Options.     (line  227)
50678* mnoieee:                               SH Options.         (line  116)
50679* mnoliw:                                MN10300 Options.    (line   59)
50680* mnomacsave:                            SH Options.         (line  111)
50681* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
50682                                                             (line   22)
50683* mnops:                                 Adapteva Epiphany Options.
50684                                                             (line   26)
50685* mnosetlb:                              MN10300 Options.    (line   69)
50686* mnosplit-lohi:                         Adapteva Epiphany Options.
50687                                                             (line  109)
50688* momit-leaf-frame-pointer:              AArch64 Options.    (line   43)
50689* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
50690* momit-leaf-frame-pointer <2>:          i386 and x86-64 Options.
50691                                                             (line  786)
50692* mone-byte-bool:                        Darwin Options.     (line   90)
50693* moptimize-membar:                      FRV Options.        (line  244)
50694* MP:                                    Preprocessor Options.
50695                                                             (line  239)
50696* mpa-risc-1-0:                          HPPA Options.       (line   19)
50697* mpa-risc-1-1:                          HPPA Options.       (line   19)
50698* mpa-risc-2-0:                          HPPA Options.       (line   19)
50699* mpack:                                 FRV Options.        (line  147)
50700* mpacked-stack:                         S/390 and zSeries Options.
50701                                                             (line   54)
50702* mpadstruct:                            SH Options.         (line  140)
50703* mpaired:                               RS/6000 and PowerPC Options.
50704                                                             (line  205)
50705* mpaired-single:                        MIPS Options.       (line  283)
50706* mpc32:                                 i386 and x86-64 Options.
50707                                                             (line  434)
50708* mpc64:                                 i386 and x86-64 Options.
50709                                                             (line  434)
50710* mpc80:                                 i386 and x86-64 Options.
50711                                                             (line  434)
50712* mpcrel:                                M680x0 Options.     (line  275)
50713* mpdebug:                               CRIS Options.       (line   36)
50714* mpe:                                   RS/6000 and PowerPC Options.
50715                                                             (line  339)
50716* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
50717                                                             (line   59)
50718* mpic-register:                         ARM Options.        (line  219)
50719* mpid:                                  RX Options.         (line  117)
50720* mplt:                                  MIPS Options.       (line  181)
50721* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
50722                                                             (line  868)
50723* mpoke-function-name:                   ARM Options.        (line  226)
50724* mpopc:                                 SPARC Options.      (line  230)
50725* mpopcntb:                              RS/6000 and PowerPC Options.
50726                                                             (line   27)
50727* mpopcntd:                              RS/6000 and PowerPC Options.
50728                                                             (line   27)
50729* mportable-runtime:                     HPPA Options.       (line   70)
50730* mpower8-fusion:                        RS/6000 and PowerPC Options.
50731                                                             (line  232)
50732* mpower8-vector:                        RS/6000 and PowerPC Options.
50733                                                             (line  238)
50734* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
50735                                                             (line   27)
50736* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
50737                                                             (line   27)
50738* mpowerpc64:                            RS/6000 and PowerPC Options.
50739                                                             (line   27)
50740* mprefer-avx128:                        i386 and x86-64 Options.
50741                                                             (line  607)
50742* mprefer-short-insn-regs:               Adapteva Epiphany Options.
50743                                                             (line   13)
50744* mprefergot:                            SH Options.         (line  223)
50745* mpreferred-stack-boundary:             i386 and x86-64 Options.
50746                                                             (line  464)
50747* mpretend-cmove:                        SH Options.         (line  439)
50748* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
50749                                                             (line  517)
50750* mprolog-function:                      V850 Options.       (line   23)
50751* mprologue-epilogue:                    CRIS Options.       (line   71)
50752* mprototype:                            RS/6000 and PowerPC Options.
50753                                                             (line  642)
50754* mpt-fixed:                             SH Options.         (line  359)
50755* mpush-args:                            i386 and x86-64 Options.
50756                                                             (line  730)
50757* MQ:                                    Preprocessor Options.
50758                                                             (line  266)
50759* mquad-memory:                          RS/6000 and PowerPC Options.
50760                                                             (line  245)
50761* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
50762                                                             (line  251)
50763* mr10k-cache-barrier:                   MIPS Options.       (line  554)
50764* mrecip:                                i386 and x86-64 Options.
50765                                                             (line  640)
50766* mrecip <1>:                            RS/6000 and PowerPC Options.
50767                                                             (line  797)
50768* mrecip-precision:                      RS/6000 and PowerPC Options.
50769                                                             (line  832)
50770* mrecip=opt:                            i386 and x86-64 Options.
50771                                                             (line  662)
50772* mrecip=opt <1>:                        RS/6000 and PowerPC Options.
50773                                                             (line  810)
50774* mregister-names:                       IA-64 Options.      (line   37)
50775* mregnames:                             RS/6000 and PowerPC Options.
50776                                                             (line  747)
50777* mregparm:                              i386 and x86-64 Options.
50778                                                             (line  401)
50779* mrelax:                                AVR Options.        (line  171)
50780* mrelax <1>:                            H8/300 Options.     (line    9)
50781* mrelax <2>:                            MN10300 Options.    (line   46)
50782* mrelax <3>:                            RX Options.         (line   95)
50783* mrelax <4>:                            SH Options.         (line   85)
50784* mrelax <5>:                            V850 Options.       (line  103)
50785* mrelax-immediate:                      MCore Options.      (line   19)
50786* mrelax-pic-calls:                      MIPS Options.       (line  679)
50787* mrelocatable:                          RS/6000 and PowerPC Options.
50788                                                             (line  468)
50789* mrelocatable-lib:                      RS/6000 and PowerPC Options.
50790                                                             (line  479)
50791* mrepeat:                               MeP Options.        (line   96)
50792* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
50793* mrh850-abi:                            V850 Options.       (line  127)
50794* mrtd:                                  i386 and x86-64 Options.
50795                                                             (line  377)
50796* mrtd <1>:                              M680x0 Options.     (line  236)
50797* mrtd <2>:                              Function Attributes.
50798                                                             (line  175)
50799* mrtp:                                  VxWorks Options.    (line   11)
50800* ms:                                    H8/300 Options.     (line   17)
50801* ms <1>:                                MeP Options.        (line  100)
50802* ms2600:                                H8/300 Options.     (line   24)
50803* msafe-dma:                             SPU Options.        (line   18)
50804* msafe-hints:                           SPU Options.        (line  112)
50805* msahf:                                 i386 and x86-64 Options.
50806                                                             (line  620)
50807* msatur:                                MeP Options.        (line  105)
50808* msave-acc-in-interrupts:               RX Options.         (line  109)
50809* msave-toc-indirect:                    RS/6000 and PowerPC Options.
50810                                                             (line  880)
50811* mscc:                                  FRV Options.        (line  173)
50812* msched-ar-data-spec:                   IA-64 Options.      (line  134)
50813* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
50814* msched-br-data-spec:                   IA-64 Options.      (line  128)
50815* msched-br-in-data-spec:                IA-64 Options.      (line  148)
50816* msched-control-spec:                   IA-64 Options.      (line  140)
50817* msched-costly-dep:                     RS/6000 and PowerPC Options.
50818                                                             (line  524)
50819* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
50820* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
50821* msched-in-control-spec:                IA-64 Options.      (line  162)
50822* msched-max-memory-insns:               IA-64 Options.      (line  207)
50823* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
50824* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
50825* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
50826* msched-spec-ldc:                       IA-64 Options.      (line  187)
50827* msched-spec-ldc <1>:                   IA-64 Options.      (line  190)
50828* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
50829* mschedule:                             HPPA Options.       (line   77)
50830* mscore5:                               Score Options.      (line   25)
50831* mscore5u:                              Score Options.      (line   28)
50832* mscore7:                               Score Options.      (line   31)
50833* mscore7d:                              Score Options.      (line   35)
50834* msda:                                  V850 Options.       (line   40)
50835* msdata:                                IA-64 Options.      (line   42)
50836* msdata <1>:                            RS/6000 and PowerPC Options.
50837                                                             (line  715)
50838* msdata=all:                            C6X Options.        (line   30)
50839* msdata=data:                           RS/6000 and PowerPC Options.
50840                                                             (line  720)
50841* msdata=default:                        C6X Options.        (line   22)
50842* msdata=default <1>:                    RS/6000 and PowerPC Options.
50843                                                             (line  715)
50844* msdata=eabi:                           RS/6000 and PowerPC Options.
50845                                                             (line  696)
50846* msdata=none:                           C6X Options.        (line   35)
50847* msdata=none <1>:                       M32R/D Options.     (line   40)
50848* msdata=none <2>:                       RS/6000 and PowerPC Options.
50849                                                             (line  728)
50850* msdata=sdata:                          M32R/D Options.     (line   49)
50851* msdata=sysv:                           RS/6000 and PowerPC Options.
50852                                                             (line  706)
50853* msdata=use:                            M32R/D Options.     (line   53)
50854* msdram:                                Blackfin Options.   (line  171)
50855* msdram <1>:                            MeP Options.        (line  110)
50856* msecure-plt:                           RS/6000 and PowerPC Options.
50857                                                             (line  180)
50858* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
50859* msep-data:                             Blackfin Options.   (line  109)
50860* mserialize-volatile:                   Xtensa Options.     (line   35)
50861* msetlb:                                MN10300 Options.    (line   64)
50862* mshared-library-id:                    Blackfin Options.   (line  102)
50863* mshort:                                M680x0 Options.     (line  216)
50864* msign-extend-enabled:                  LM32 Options.       (line   18)
50865* msim:                                  Blackfin Options.   (line   36)
50866* msim <1>:                              C6X Options.        (line   19)
50867* msim <2>:                              CR16 Options.       (line   18)
50868* msim <3>:                              M32C Options.       (line   13)
50869* msim <4>:                              MeP Options.        (line  114)
50870* msim <5>:                              RL78 Options.       (line    7)
50871* msim <6>:                              RS/6000 and PowerPC Options.
50872                                                             (line  652)
50873* msim <7>:                              RX Options.         (line   71)
50874* msim <8>:                              Xstormy16 Options.  (line    9)
50875* msimnovec:                             MeP Options.        (line  117)
50876* msimple-fpu:                           RS/6000 and PowerPC Options.
50877                                                             (line  372)
50878* msingle-exit:                          MMIX Options.       (line   65)
50879* msingle-float:                         MIPS Options.       (line  243)
50880* msingle-float <1>:                     RS/6000 and PowerPC Options.
50881                                                             (line  368)
50882* msingle-pic-base:                      ARM Options.        (line  213)
50883* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
50884                                                             (line  511)
50885* msio:                                  HPPA Options.       (line  104)
50886* mslow-bytes:                           MCore Options.      (line   35)
50887* msmall-data:                           DEC Alpha Options.  (line  187)
50888* msmall-data-limit:                     RX Options.         (line   47)
50889* msmall-divides:                        MicroBlaze Options. (line   39)
50890* msmall-exec:                           S/390 and zSeries Options.
50891                                                             (line   79)
50892* msmall-mem:                            SPU Options.        (line   38)
50893* msmall-model:                          FR30 Options.       (line    9)
50894* msmall-text:                           DEC Alpha Options.  (line  205)
50895* msmall16:                              Adapteva Epiphany Options.
50896                                                             (line   66)
50897* msmartmips:                            MIPS Options.       (line  279)
50898* msoft-float:                           DEC Alpha Options.  (line   10)
50899* msoft-float <1>:                       FRV Options.        (line   27)
50900* msoft-float <2>:                       HPPA Options.       (line   90)
50901* msoft-float <3>:                       i386 and x86-64 Options.
50902                                                             (line  287)
50903* msoft-float <4>:                       M680x0 Options.     (line  200)
50904* msoft-float <5>:                       MicroBlaze Options. (line    7)
50905* msoft-float <6>:                       MIPS Options.       (line  229)
50906* msoft-float <7>:                       PDP-11 Options.     (line   13)
50907* msoft-float <8>:                       RS/6000 and PowerPC Options.
50908                                                             (line  362)
50909* msoft-float <9>:                       S/390 and zSeries Options.
50910                                                             (line   11)
50911* msoft-float <10>:                      SPARC Options.      (line   39)
50912* msoft-float <11>:                      V850 Options.       (line  113)
50913* msoft-quad-float:                      SPARC Options.      (line   59)
50914* msp8:                                  AVR Options.        (line  185)
50915* mspace:                                SH Options.         (line  220)
50916* mspace <1>:                            V850 Options.       (line   30)
50917* mspe:                                  RS/6000 and PowerPC Options.
50918                                                             (line  200)
50919* mspecld-anomaly:                       Blackfin Options.   (line   50)
50920* msplit-addresses:                      MIPS Options.       (line  424)
50921* msplit-vecmove-early:                  Adapteva Epiphany Options.
50922                                                             (line  126)
50923* msse:                                  i386 and x86-64 Options.
50924                                                             (line  564)
50925* msse2avx:                              i386 and x86-64 Options.
50926                                                             (line  804)
50927* msseregparm:                           i386 and x86-64 Options.
50928                                                             (line  412)
50929* mstack-align:                          CRIS Options.       (line   55)
50930* mstack-bias:                           SPARC Options.      (line  313)
50931* mstack-check-l1:                       Blackfin Options.   (line   76)
50932* mstack-guard:                          S/390 and zSeries Options.
50933                                                             (line  154)
50934* mstack-increment:                      MCore Options.      (line   50)
50935* mstack-offset:                         Adapteva Epiphany Options.
50936                                                             (line   37)
50937* mstack-size:                           S/390 and zSeries Options.
50938                                                             (line  154)
50939* mstackrealign:                         i386 and x86-64 Options.
50940                                                             (line  455)
50941* mstdmain:                              SPU Options.        (line   44)
50942* mstrict-align:                         AArch64 Options.    (line   38)
50943* mstrict-align <1>:                     M680x0 Options.     (line  283)
50944* mstrict-align <2>:                     RS/6000 and PowerPC Options.
50945                                                             (line  463)
50946* mstrict-X:                             AVR Options.        (line  198)
50947* mstring:                               RS/6000 and PowerPC Options.
50948                                                             (line  399)
50949* mstringop-strategy=ALG:                i386 and x86-64 Options.
50950                                                             (line  768)
50951* mstructure-size-boundary:              ARM Options.        (line  170)
50952* msvr4-struct-return:                   RS/6000 and PowerPC Options.
50953                                                             (line  604)
50954* msym32:                                MIPS Options.       (line  322)
50955* msynci:                                MIPS Options.       (line  664)
50956* MT:                                    Preprocessor Options.
50957                                                             (line  251)
50958* mtarget-align:                         Xtensa Options.     (line   59)
50959* mtas:                                  SH Options.         (line  211)
50960* mtda:                                  V850 Options.       (line   34)
50961* mtext-section-literals:                Xtensa Options.     (line   47)
50962* mtf:                                   MeP Options.        (line  121)
50963* mthread:                               i386 and x86-64 Windows Options.
50964                                                             (line   26)
50965* mthreads:                              i386 and x86-64 Options.
50966                                                             (line  745)
50967* mthumb:                                ARM Options.        (line  248)
50968* mthumb-interwork:                      ARM Options.        (line   25)
50969* mtiny-stack:                           AVR Options.        (line  212)
50970* mtiny=:                                MeP Options.        (line  125)
50971* mTLS:                                  FRV Options.        (line   90)
50972* mtls:                                  FRV Options.        (line   94)
50973* mtls-dialect:                          ARM Options.        (line  290)
50974* mtls-dialect <1>:                      i386 and x86-64 Options.
50975                                                             (line  723)
50976* mtls-dialect=desc:                     AArch64 Options.    (line   47)
50977* mtls-dialect=traditional:              AArch64 Options.    (line   51)
50978* mtls-direct-seg-refs:                  i386 and x86-64 Options.
50979                                                             (line  794)
50980* mtls-markers:                          RS/6000 and PowerPC Options.
50981                                                             (line  785)
50982* mtls-size:                             IA-64 Options.      (line  112)
50983* mtoc:                                  RS/6000 and PowerPC Options.
50984                                                             (line  488)
50985* mtomcat-stats:                         FRV Options.        (line  254)
50986* mtoplevel-symbols:                     MMIX Options.       (line   39)
50987* mtp:                                   ARM Options.        (line  282)
50988* mtpcs-frame:                           ARM Options.        (line  255)
50989* mtpcs-leaf-frame:                      ARM Options.        (line  261)
50990* mtpf-trace:                            S/390 and zSeries Options.
50991                                                             (line  129)
50992* mtrap-precision:                       DEC Alpha Options.  (line  109)
50993* mtune:                                 AArch64 Options.    (line   82)
50994* mtune <1>:                             ARM Options.        (line   90)
50995* mtune <2>:                             CRIS Options.       (line   17)
50996* mtune <3>:                             DEC Alpha Options.  (line  259)
50997* mtune <4>:                             i386 and x86-64 Options.
50998                                                             (line  191)
50999* mtune <5>:                             IA-64 Options.      (line  116)
51000* mtune <6>:                             M680x0 Options.     (line   68)
51001* mtune <7>:                             MIPS Options.       (line   63)
51002* mtune <8>:                             MN10300 Options.    (line   30)
51003* mtune <9>:                             RS/6000 and PowerPC Options.
51004                                                             (line  110)
51005* mtune <10>:                            S/390 and zSeries Options.
51006                                                             (line  122)
51007* mtune <11>:                            SPARC Options.      (line  180)
51008* muclibc:                               GNU/Linux Options.  (line   13)
51009* muls:                                  Score Options.      (line   18)
51010* multcost=NUMBER:                       SH Options.         (line  233)
51011* multilib-library-pic:                  FRV Options.        (line  110)
51012* multiply-enabled:                      LM32 Options.       (line   15)
51013* multiply_defined:                      Darwin Options.     (line  196)
51014* multiply_defined_unused:               Darwin Options.     (line  196)
51015* multi_module:                          Darwin Options.     (line  196)
51016* munaligned-access:                     ARM Options.        (line  314)
51017* munaligned-doubles:                    SPARC Options.      (line   73)
51018* municode:                              i386 and x86-64 Windows Options.
51019                                                             (line   30)
51020* muninit-const-in-rodata:               MIPS Options.       (line  394)
51021* munix:                                 VAX Options.        (line    9)
51022* munix-asm:                             PDP-11 Options.     (line   68)
51023* munsafe-dma:                           SPU Options.        (line   18)
51024* mupdate:                               RS/6000 and PowerPC Options.
51025                                                             (line  410)
51026* muser-enabled:                         LM32 Options.       (line   21)
51027* muser-mode:                            SPARC Options.      (line   85)
51028* musermode:                             SH Options.         (line  228)
51029* mv850:                                 V850 Options.       (line   49)
51030* mv850e:                                V850 Options.       (line   79)
51031* mv850e1:                               V850 Options.       (line   70)
51032* mv850e2:                               V850 Options.       (line   66)
51033* mv850e2v3:                             V850 Options.       (line   61)
51034* mv850e2v4:                             V850 Options.       (line   57)
51035* mv850e3v5:                             V850 Options.       (line   52)
51036* mv850es:                               V850 Options.       (line   75)
51037* mv8plus:                               SPARC Options.      (line  194)
51038* mveclibabi:                            i386 and x86-64 Options.
51039                                                             (line  691)
51040* mveclibabi <1>:                        RS/6000 and PowerPC Options.
51041                                                             (line  841)
51042* mvect8-ret-in-mem:                     i386 and x86-64 Options.
51043                                                             (line  422)
51044* mvis:                                  SPARC Options.      (line  201)
51045* mvis2:                                 SPARC Options.      (line  207)
51046* mvis3:                                 SPARC Options.      (line  215)
51047* mvliw-branch:                          FRV Options.        (line  201)
51048* mvms-return-codes:                     VMS Options.        (line    9)
51049* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
51050* mvr4130-align:                         MIPS Options.       (line  653)
51051* mvrsave:                               RS/6000 and PowerPC Options.
51052                                                             (line  170)
51053* mvsx:                                  RS/6000 and PowerPC Options.
51054                                                             (line  214)
51055* mvxworks:                              RS/6000 and PowerPC Options.
51056                                                             (line  673)
51057* mvzeroupper:                           i386 and x86-64 Options.
51058                                                             (line  601)
51059* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
51060                                                             (line  176)
51061* mwarn-dynamicstack:                    S/390 and zSeries Options.
51062                                                             (line  148)
51063* mwarn-framesize:                       S/390 and zSeries Options.
51064                                                             (line  140)
51065* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
51066* mwarn-reloc:                           SPU Options.        (line   10)
51067* mwide-bitfields:                       MCore Options.      (line   23)
51068* mwin32:                                i386 and x86-64 Windows Options.
51069                                                             (line   35)
51070* mwindows:                              i386 and x86-64 Windows Options.
51071                                                             (line   41)
51072* mword-relocations:                     ARM Options.        (line  301)
51073* mwords-little-endian:                  ARM Options.        (line   66)
51074* mx32:                                  i386 and x86-64 Options.
51075                                                             (line  832)
51076* mxgot:                                 M680x0 Options.     (line  315)
51077* mxgot <1>:                             MIPS Options.       (line  191)
51078* mxilinx-fpu:                           RS/6000 and PowerPC Options.
51079                                                             (line  383)
51080* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
51081* mxl-compat:                            RS/6000 and PowerPC Options.
51082                                                             (line  320)
51083* mxl-float-convert:                     MicroBlaze Options. (line   51)
51084* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
51085* mxl-gp-opt:                            MicroBlaze Options. (line   45)
51086* mxl-multiply-high:                     MicroBlaze Options. (line   48)
51087* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
51088* mxl-reorder:                           MicroBlaze Options. (line   63)
51089* mxl-soft-div:                          MicroBlaze Options. (line   30)
51090* mxl-soft-mul:                          MicroBlaze Options. (line   27)
51091* mxl-stack-check:                       MicroBlaze Options. (line   42)
51092* myellowknife:                          RS/6000 and PowerPC Options.
51093                                                             (line  668)
51094* mzarch:                                S/390 and zSeries Options.
51095                                                             (line   94)
51096* mzda:                                  V850 Options.       (line   45)
51097* mzdcbranch:                            SH Options.         (line  396)
51098* mzero-extend:                          MMIX Options.       (line   26)
51099* no-canonical-prefixes:                 Overall Options.    (line  334)
51100* no-integrated-cpp:                     Preprocessor Options.
51101                                                             (line   34)
51102* no-sysroot-suffix:                     Directory Options.  (line  109)
51103* noall_load:                            Darwin Options.     (line  196)
51104* nocpp:                                 MIPS Options.       (line  491)
51105* nodefaultlibs:                         Link Options.       (line   62)
51106* nofixprebinding:                       Darwin Options.     (line  196)
51107* nofpu:                                 RX Options.         (line   17)
51108* nolibdld:                              HPPA Options.       (line  187)
51109* nomultidefs:                           Darwin Options.     (line  196)
51110* non-static:                            VxWorks Options.    (line   16)
51111* noprebind:                             Darwin Options.     (line  196)
51112* noseglinkedit:                         Darwin Options.     (line  196)
51113* nostartfiles:                          Link Options.       (line   57)
51114* nostdinc:                              Preprocessor Options.
51115                                                             (line  401)
51116* nostdinc++:                            C++ Dialect Options.
51117                                                             (line  346)
51118* nostdinc++ <1>:                        Preprocessor Options.
51119                                                             (line  406)
51120* nostdlib:                              Link Options.       (line   74)
51121* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
51122* o:                                     Overall Options.    (line  192)
51123* O:                                     Optimize Options.   (line   39)
51124* o <1>:                                 Preprocessor Options.
51125                                                             (line   87)
51126* O0:                                    Optimize Options.   (line  128)
51127* O1:                                    Optimize Options.   (line   39)
51128* O2:                                    Optimize Options.   (line   83)
51129* O3:                                    Optimize Options.   (line  121)
51130* Ofast:                                 Optimize Options.   (line  142)
51131* Og:                                    Optimize Options.   (line  148)
51132* Os:                                    Optimize Options.   (line  132)
51133* p:                                     Debugging Options.  (line  328)
51134* P:                                     Preprocessor Options.
51135                                                             (line  647)
51136* pagezero_size:                         Darwin Options.     (line  196)
51137* param:                                 Optimize Options.   (line 2237)
51138* pass-exit-codes:                       Overall Options.    (line  150)
51139* pedantic:                              Standards.          (line   16)
51140* pedantic <1>:                          Warning Options.    (line   71)
51141* pedantic <2>:                          Preprocessor Options.
51142                                                             (line  175)
51143* pedantic <3>:                          C Extensions.       (line    6)
51144* pedantic <4>:                          Alternate Keywords. (line   30)
51145* pedantic <5>:                          Warnings and Errors.
51146                                                             (line   25)
51147* pedantic-errors:                       Standards.          (line   16)
51148* pedantic-errors <1>:                   Warning Options.    (line  112)
51149* pedantic-errors <2>:                   Preprocessor Options.
51150                                                             (line  180)
51151* pedantic-errors <3>:                   Non-bugs.           (line  216)
51152* pedantic-errors <4>:                   Warnings and Errors.
51153                                                             (line   25)
51154* pg:                                    Debugging Options.  (line  334)
51155* pie:                                   Link Options.       (line   99)
51156* pipe:                                  Overall Options.    (line  215)
51157* prebind:                               Darwin Options.     (line  196)
51158* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
51159* print-file-name:                       Debugging Options.  (line 1284)
51160* print-libgcc-file-name:                Debugging Options.  (line 1318)
51161* print-multi-directory:                 Debugging Options.  (line 1290)
51162* print-multi-lib:                       Debugging Options.  (line 1295)
51163* print-multi-os-directory:              Debugging Options.  (line 1302)
51164* print-multiarch:                       Debugging Options.  (line 1311)
51165* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
51166                                                             (line  203)
51167* print-prog-name:                       Debugging Options.  (line 1315)
51168* print-search-dirs:                     Debugging Options.  (line 1326)
51169* print-sysroot:                         Debugging Options.  (line 1339)
51170* print-sysroot-headers-suffix:          Debugging Options.  (line 1346)
51171* private_bundle:                        Darwin Options.     (line  196)
51172* pthread:                               RS/6000 and PowerPC Options.
51173                                                             (line  792)
51174* pthread <1>:                           Solaris 2 Options.  (line   30)
51175* pthreads:                              Solaris 2 Options.  (line   24)
51176* Q:                                     Debugging Options.  (line  340)
51177* Qn:                                    System V Options.   (line   18)
51178* Qy:                                    System V Options.   (line   14)
51179* rdynamic:                              Link Options.       (line  105)
51180* read_only_relocs:                      Darwin Options.     (line  196)
51181* remap:                                 Preprocessor Options.
51182                                                             (line  694)
51183* S:                                     Overall Options.    (line  175)
51184* S <1>:                                 Link Options.       (line   20)
51185* s:                                     Link Options.       (line  112)
51186* save-temps:                            Debugging Options.  (line 1193)
51187* save-temps=obj:                        Debugging Options.  (line 1219)
51188* sectalign:                             Darwin Options.     (line  196)
51189* sectcreate:                            Darwin Options.     (line  196)
51190* sectobjectsymbols:                     Darwin Options.     (line  196)
51191* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
51192* sectorder:                             Darwin Options.     (line  196)
51193* seg1addr:                              Darwin Options.     (line  196)
51194* segaddr:                               Darwin Options.     (line  196)
51195* seglinkedit:                           Darwin Options.     (line  196)
51196* segprot:                               Darwin Options.     (line  196)
51197* segs_read_only_addr:                   Darwin Options.     (line  196)
51198* segs_read_only_addr <1>:               Darwin Options.     (line  196)
51199* segs_read_write_addr:                  Darwin Options.     (line  196)
51200* segs_read_write_addr <1>:              Darwin Options.     (line  196)
51201* seg_addr_table:                        Darwin Options.     (line  196)
51202* seg_addr_table_filename:               Darwin Options.     (line  196)
51203* shared:                                Link Options.       (line  120)
51204* shared-libgcc:                         Link Options.       (line  128)
51205* short-calls:                           Adapteva Epiphany Options.
51206                                                             (line   61)
51207* sim:                                   CRIS Options.       (line   95)
51208* sim2:                                  CRIS Options.       (line  101)
51209* single_module:                         Darwin Options.     (line  196)
51210* specs:                                 Directory Options.  (line   86)
51211* static:                                Link Options.       (line  116)
51212* static <1>:                            Darwin Options.     (line  196)
51213* static <2>:                            HPPA Options.       (line  191)
51214* static-libgcc:                         Link Options.       (line  128)
51215* std:                                   Standards.          (line   16)
51216* std <1>:                               C Dialect Options.  (line   46)
51217* std <2>:                               Other Builtins.     (line   21)
51218* std <3>:                               Non-bugs.           (line  107)
51219* std=:                                  Preprocessor Options.
51220                                                             (line  340)
51221* sub_library:                           Darwin Options.     (line  196)
51222* sub_umbrella:                          Darwin Options.     (line  196)
51223* symbolic:                              Link Options.       (line  190)
51224* sysroot:                               Directory Options.  (line   94)
51225* T:                                     Link Options.       (line  196)
51226* target-help:                           Overall Options.    (line  230)
51227* target-help <1>:                       Preprocessor Options.
51228                                                             (line  699)
51229* threads:                               HPPA Options.       (line  204)
51230* time:                                  Debugging Options.  (line 1234)
51231* tno-android-cc:                        GNU/Linux Options.  (line   31)
51232* tno-android-ld:                        GNU/Linux Options.  (line   35)
51233* traditional:                           C Dialect Options.  (line  311)
51234* traditional <1>:                       Incompatibilities.  (line    6)
51235* traditional-cpp:                       C Dialect Options.  (line  311)
51236* traditional-cpp <1>:                   Preprocessor Options.
51237                                                             (line  677)
51238* trigraphs:                             C Dialect Options.  (line  306)
51239* trigraphs <1>:                         Preprocessor Options.
51240                                                             (line  681)
51241* twolevel_namespace:                    Darwin Options.     (line  196)
51242* U:                                     Preprocessor Options.
51243                                                             (line   69)
51244* u:                                     Link Options.       (line  228)
51245* umbrella:                              Darwin Options.     (line  196)
51246* undef:                                 Preprocessor Options.
51247                                                             (line   73)
51248* undefined:                             Darwin Options.     (line  196)
51249* unexported_symbols_list:               Darwin Options.     (line  196)
51250* v:                                     Overall Options.    (line  203)
51251* v <1>:                                 Preprocessor Options.
51252                                                             (line  703)
51253* version:                               Overall Options.    (line  338)
51254* version <1>:                           Preprocessor Options.
51255                                                             (line  715)
51256* w:                                     Warning Options.    (line   25)
51257* W:                                     Warning Options.    (line  166)
51258* W <1>:                                 Warning Options.    (line 1248)
51259* W <2>:                                 Warning Options.    (line 1327)
51260* w <1>:                                 Preprocessor Options.
51261                                                             (line  171)
51262* W <3>:                                 Incompatibilities.  (line   64)
51263* Wa:                                    Assembler Options.  (line    9)
51264* Wabi:                                  C++ Dialect Options.
51265                                                             (line  360)
51266* Waddr-space-convert:                   AVR Options.        (line  215)
51267* Waddress:                              Warning Options.    (line 1165)
51268* Waggregate-return:                     Warning Options.    (line 1183)
51269* Waggressive-loop-optimizations:        Warning Options.    (line 1188)
51270* Wall:                                  Warning Options.    (line  116)
51271* Wall <1>:                              Preprocessor Options.
51272                                                             (line   93)
51273* Wall <2>:                              Standard Libraries. (line    6)
51274* Warray-bounds:                         Warning Options.    (line  825)
51275* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
51276                                                             (line  157)
51277* Wattributes:                           Warning Options.    (line 1193)
51278* Wbad-function-cast:                    Warning Options.    (line 1040)
51279* Wbuiltin-macro-redefined:              Warning Options.    (line 1199)
51280* Wcast-align:                           Warning Options.    (line 1071)
51281* Wcast-qual:                            Warning Options.    (line 1055)
51282* Wchar-subscripts:                      Warning Options.    (line  205)
51283* Wclobbered:                            Warning Options.    (line 1090)
51284* Wcomment:                              Warning Options.    (line  210)
51285* Wcomment <1>:                          Preprocessor Options.
51286                                                             (line  101)
51287* Wcomments:                             Preprocessor Options.
51288                                                             (line  101)
51289* Wconversion:                           Warning Options.    (line 1094)
51290* Wconversion-null:                      Warning Options.    (line 1112)
51291* Wctor-dtor-privacy:                    C++ Dialect Options.
51292                                                             (line  467)
51293* Wdeclaration-after-statement:          Warning Options.    (line  957)
51294* Wdelete-non-virtual-dtor:              C++ Dialect Options.
51295                                                             (line  474)
51296* Wdeprecated:                           Warning Options.    (line 1314)
51297* Wdeprecated-declarations:              Warning Options.    (line 1318)
51298* Wdisabled-optimization:                Warning Options.    (line 1473)
51299* Wdiv-by-zero:                          Warning Options.    (line  830)
51300* Wdouble-promotion:                     Warning Options.    (line  234)
51301* weak_reference_mismatches:             Darwin Options.     (line  196)
51302* Weffc++:                               C++ Dialect Options.
51303                                                             (line  552)
51304* Wempty-body:                           Warning Options.    (line 1123)
51305* Wendif-labels:                         Warning Options.    (line  967)
51306* Wendif-labels <1>:                     Preprocessor Options.
51307                                                             (line  148)
51308* Wenum-compare:                         Warning Options.    (line 1127)
51309* Werror:                                Warning Options.    (line   28)
51310* Werror <1>:                            Preprocessor Options.
51311                                                             (line  161)
51312* Werror=:                               Warning Options.    (line   31)
51313* Wextra:                                Warning Options.    (line  166)
51314* Wextra <1>:                            Warning Options.    (line 1248)
51315* Wextra <2>:                            Warning Options.    (line 1327)
51316* Wfatal-errors:                         Warning Options.    (line   48)
51317* Wfloat-equal:                          Warning Options.    (line  857)
51318* Wformat:                               Warning Options.    (line  253)
51319* Wformat <1>:                           Warning Options.    (line  804)
51320* Wformat <2>:                           Function Attributes.
51321                                                             (line  414)
51322* Wformat-contains-nul:                  Warning Options.    (line  287)
51323* Wformat-extra-args:                    Warning Options.    (line  291)
51324* Wformat-nonliteral:                    Warning Options.    (line  315)
51325* Wformat-nonliteral <1>:                Function Attributes.
51326                                                             (line  479)
51327* Wformat-security:                      Warning Options.    (line  320)
51328* Wformat-y2k:                           Warning Options.    (line  332)
51329* Wformat-zero-length:                   Warning Options.    (line  305)
51330* Wformat=:                              Warning Options.    (line  253)
51331* Wframe-larger-than:                    Warning Options.    (line  981)
51332* Wfree-nonheap-object:                  Warning Options.    (line  990)
51333* whatsloaded:                           Darwin Options.     (line  196)
51334* whyload:                               Darwin Options.     (line  196)
51335* Wignored-qualifiers:                   Warning Options.    (line  372)
51336* Wimplicit:                             Warning Options.    (line  368)
51337* Wimplicit-function-declaration:        Warning Options.    (line  362)
51338* Wimplicit-int:                         Warning Options.    (line  358)
51339* Winherited-variadic-ctor:              Warning Options.    (line 1383)
51340* Winit-self:                            Warning Options.    (line  343)
51341* Winline:                               Warning Options.    (line 1388)
51342* Winline <1>:                           Inline.             (line   63)
51343* Wint-to-pointer-cast:                  Warning Options.    (line 1415)
51344* Winvalid-offsetof:                     Warning Options.    (line 1401)
51345* Winvalid-pch:                          Warning Options.    (line 1424)
51346* Wjump-misses-init:                     Warning Options.    (line 1133)
51347* Wl:                                    Link Options.       (line  220)
51348* Wlarger-than-LEN:                      Warning Options.    (line  978)
51349* Wlarger-than=LEN:                      Warning Options.    (line  978)
51350* Wliteral-suffix:                       C++ Dialect Options.
51351                                                             (line  481)
51352* Wlogical-op:                           Warning Options.    (line 1178)
51353* Wlong-long:                            Warning Options.    (line 1428)
51354* Wmain:                                 Warning Options.    (line  383)
51355* Wmaybe-uninitialized:                  Warning Options.    (line  641)
51356* Wmissing-braces:                       Warning Options.    (line  390)
51357* Wmissing-declarations:                 Warning Options.    (line 1238)
51358* Wmissing-field-initializers:           Warning Options.    (line 1248)
51359* Wmissing-format-attribute:             Warning Options.    (line  804)
51360* Wmissing-include-dirs:                 Warning Options.    (line  401)
51361* Wmissing-parameter-type:               Warning Options.    (line 1220)
51362* Wmissing-prototypes:                   Warning Options.    (line 1228)
51363* Wmultichar:                            Warning Options.    (line 1266)
51364* Wnarrowing:                            C++ Dialect Options.
51365                                                             (line  502)
51366* Wnested-externs:                       Warning Options.    (line 1380)
51367* Wno-abi:                               C++ Dialect Options.
51368                                                             (line  360)
51369* Wno-address:                           Warning Options.    (line 1165)
51370* Wno-aggregate-return:                  Warning Options.    (line 1183)
51371* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1188)
51372* Wno-all:                               Warning Options.    (line  116)
51373* Wno-array-bounds:                      Warning Options.    (line  825)
51374* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
51375                                                             (line  157)
51376* Wno-attributes:                        Warning Options.    (line 1193)
51377* Wno-bad-function-cast:                 Warning Options.    (line 1040)
51378* Wno-builtin-macro-redefined:           Warning Options.    (line 1199)
51379* Wno-cast-align:                        Warning Options.    (line 1071)
51380* Wno-cast-qual:                         Warning Options.    (line 1055)
51381* Wno-char-subscripts:                   Warning Options.    (line  205)
51382* Wno-clobbered:                         Warning Options.    (line 1090)
51383* Wno-comment:                           Warning Options.    (line  210)
51384* Wno-conversion:                        Warning Options.    (line 1094)
51385* Wno-conversion-null:                   Warning Options.    (line 1112)
51386* Wno-coverage-mismatch:                 Warning Options.    (line  215)
51387* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
51388                                                             (line  467)
51389* Wno-declaration-after-statement:       Warning Options.    (line  957)
51390* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
51391                                                             (line  474)
51392* Wno-deprecated:                        Warning Options.    (line 1314)
51393* Wno-deprecated-declarations:           Warning Options.    (line 1318)
51394* Wno-disabled-optimization:             Warning Options.    (line 1473)
51395* Wno-div-by-zero:                       Warning Options.    (line  830)
51396* Wno-double-promotion:                  Warning Options.    (line  234)
51397* Wno-effc++:                            C++ Dialect Options.
51398                                                             (line  552)
51399* Wno-empty-body:                        Warning Options.    (line 1123)
51400* Wno-endif-labels:                      Warning Options.    (line  967)
51401* Wno-enum-compare:                      Warning Options.    (line 1127)
51402* Wno-error:                             Warning Options.    (line   28)
51403* Wno-error=:                            Warning Options.    (line   31)
51404* Wno-extra:                             Warning Options.    (line  166)
51405* Wno-extra <1>:                         Warning Options.    (line 1248)
51406* Wno-extra <2>:                         Warning Options.    (line 1327)
51407* Wno-fatal-errors:                      Warning Options.    (line   48)
51408* Wno-float-equal:                       Warning Options.    (line  857)
51409* Wno-format:                            Warning Options.    (line  253)
51410* Wno-format <1>:                        Warning Options.    (line  804)
51411* Wno-format-contains-nul:               Warning Options.    (line  287)
51412* Wno-format-extra-args:                 Warning Options.    (line  291)
51413* Wno-format-nonliteral:                 Warning Options.    (line  315)
51414* Wno-format-security:                   Warning Options.    (line  320)
51415* Wno-format-y2k:                        Warning Options.    (line  332)
51416* Wno-format-zero-length:                Warning Options.    (line  305)
51417* Wno-free-nonheap-object:               Warning Options.    (line  990)
51418* Wno-ignored-qualifiers:                Warning Options.    (line  372)
51419* Wno-implicit:                          Warning Options.    (line  368)
51420* Wno-implicit-function-declaration:     Warning Options.    (line  362)
51421* Wno-implicit-int:                      Warning Options.    (line  358)
51422* Wno-inherited-variadic-ctor:           Warning Options.    (line 1383)
51423* Wno-init-self:                         Warning Options.    (line  343)
51424* Wno-inline:                            Warning Options.    (line 1388)
51425* Wno-int-to-pointer-cast:               Warning Options.    (line 1415)
51426* Wno-invalid-offsetof:                  Warning Options.    (line 1401)
51427* Wno-invalid-pch:                       Warning Options.    (line 1424)
51428* Wno-jump-misses-init:                  Warning Options.    (line 1133)
51429* Wno-literal-suffix:                    C++ Dialect Options.
51430                                                             (line  481)
51431* Wno-logical-op:                        Warning Options.    (line 1178)
51432* Wno-long-long:                         Warning Options.    (line 1428)
51433* Wno-main:                              Warning Options.    (line  383)
51434* Wno-maybe-uninitialized:               Warning Options.    (line  641)
51435* Wno-missing-braces:                    Warning Options.    (line  390)
51436* Wno-missing-declarations:              Warning Options.    (line 1238)
51437* Wno-missing-field-initializers:        Warning Options.    (line 1248)
51438* Wno-missing-format-attribute:          Warning Options.    (line  804)
51439* Wno-missing-include-dirs:              Warning Options.    (line  401)
51440* Wno-missing-parameter-type:            Warning Options.    (line 1220)
51441* Wno-missing-prototypes:                Warning Options.    (line 1228)
51442* Wno-mudflap:                           Warning Options.    (line 1493)
51443* Wno-multichar:                         Warning Options.    (line 1266)
51444* Wno-narrowing:                         C++ Dialect Options.
51445                                                             (line  502)
51446* Wno-nested-externs:                    Warning Options.    (line 1380)
51447* Wno-noexcept:                          C++ Dialect Options.
51448                                                             (line  515)
51449* Wno-non-template-friend:               C++ Dialect Options.
51450                                                             (line  587)
51451* Wno-non-virtual-dtor:                  C++ Dialect Options.
51452                                                             (line  521)
51453* Wno-nonnull:                           Warning Options.    (line  336)
51454* Wno-old-style-cast:                    C++ Dialect Options.
51455                                                             (line  603)
51456* Wno-old-style-declaration:             Warning Options.    (line 1210)
51457* Wno-old-style-definition:              Warning Options.    (line 1216)
51458* Wno-overflow:                          Warning Options.    (line 1324)
51459* Wno-overlength-strings:                Warning Options.    (line 1497)
51460* Wno-overloaded-virtual:                C++ Dialect Options.
51461                                                             (line  609)
51462* Wno-override-init:                     Warning Options.    (line 1327)
51463* Wno-packed:                            Warning Options.    (line 1335)
51464* Wno-packed-bitfield-compat:            Warning Options.    (line 1352)
51465* Wno-padded:                            Warning Options.    (line 1369)
51466* Wno-parentheses:                       Warning Options.    (line  404)
51467* Wno-pedantic-ms-format:                Warning Options.    (line 1020)
51468* Wno-pmf-conversions:                   C++ Dialect Options.
51469                                                             (line  628)
51470* Wno-pmf-conversions <1>:               Bound member functions.
51471                                                             (line   35)
51472* Wno-pointer-arith:                     Warning Options.    (line 1026)
51473* Wno-pointer-sign:                      Warning Options.    (line 1482)
51474* Wno-pointer-to-int-cast:               Warning Options.    (line 1420)
51475* Wno-pragmas:                           Warning Options.    (line  691)
51476* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
51477                                                             (line  161)
51478* Wno-redundant-decls:                   Warning Options.    (line 1376)
51479* Wno-reorder:                           C++ Dialect Options.
51480                                                             (line  527)
51481* Wno-return-local-addr:                 Warning Options.    (line  499)
51482* Wno-return-type:                       Warning Options.    (line  503)
51483* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
51484                                                             (line  171)
51485* Wno-sequence-point:                    Warning Options.    (line  453)
51486* Wno-shadow:                            Warning Options.    (line  971)
51487* Wno-sign-compare:                      Warning Options.    (line 1144)
51488* Wno-sign-conversion:                   Warning Options.    (line 1151)
51489* Wno-sign-promo:                        C++ Dialect Options.
51490                                                             (line  632)
51491* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1157)
51492* Wno-stack-protector:                   Warning Options.    (line 1488)
51493* Wno-strict-aliasing:                   Warning Options.    (line  696)
51494* Wno-strict-null-sentinel:              C++ Dialect Options.
51495                                                             (line  580)
51496* Wno-strict-overflow:                   Warning Options.    (line  735)
51497* Wno-strict-prototypes:                 Warning Options.    (line 1204)
51498* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
51499                                                             (line  183)
51500* Wno-suggest-attribute=:                Warning Options.    (line  784)
51501* Wno-suggest-attribute=const:           Warning Options.    (line  790)
51502* Wno-suggest-attribute=format:          Warning Options.    (line  804)
51503* Wno-suggest-attribute=noreturn:        Warning Options.    (line  790)
51504* Wno-suggest-attribute=pure:            Warning Options.    (line  790)
51505* Wno-switch:                            Warning Options.    (line  517)
51506* Wno-switch-default:                    Warning Options.    (line  525)
51507* Wno-switch-enum:                       Warning Options.    (line  528)
51508* Wno-sync-nand:                         Warning Options.    (line  537)
51509* Wno-system-headers:                    Warning Options.    (line  835)
51510* Wno-traditional:                       Warning Options.    (line  872)
51511* Wno-traditional-conversion:            Warning Options.    (line  949)
51512* Wno-trampolines:                       Warning Options.    (line  846)
51513* Wno-trigraphs:                         Warning Options.    (line  542)
51514* Wno-type-limits:                       Warning Options.    (line 1033)
51515* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
51516                                                             (line  191)
51517* Wno-undef:                             Warning Options.    (line  964)
51518* Wno-uninitialized:                     Warning Options.    (line  619)
51519* Wno-unknown-pragmas:                   Warning Options.    (line  684)
51520* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1014)
51521* Wno-unused:                            Warning Options.    (line  612)
51522* Wno-unused-but-set-parameter:          Warning Options.    (line  547)
51523* Wno-unused-but-set-variable:           Warning Options.    (line  556)
51524* Wno-unused-function:                   Warning Options.    (line  566)
51525* Wno-unused-label:                      Warning Options.    (line  571)
51526* Wno-unused-parameter:                  Warning Options.    (line  582)
51527* Wno-unused-result:                     Warning Options.    (line  589)
51528* Wno-unused-value:                      Warning Options.    (line  602)
51529* Wno-unused-variable:                   Warning Options.    (line  594)
51530* Wno-useless-cast:                      Warning Options.    (line 1120)
51531* Wno-varargs:                           Warning Options.    (line 1439)
51532* Wno-variadic-macros:                   Warning Options.    (line 1433)
51533* Wno-vector-operation-performance:      Warning Options.    (line 1444)
51534* Wno-virtual-move-assign:               Warning Options.    (line 1454)
51535* Wno-vla:                               Warning Options.    (line 1463)
51536* Wno-volatile-register-var:             Warning Options.    (line 1467)
51537* Wno-write-strings:                     Warning Options.    (line 1077)
51538* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1116)
51539* Wnoexcept:                             C++ Dialect Options.
51540                                                             (line  515)
51541* Wnon-template-friend:                  C++ Dialect Options.
51542                                                             (line  587)
51543* Wnon-virtual-dtor:                     C++ Dialect Options.
51544                                                             (line  521)
51545* Wnonnull:                              Warning Options.    (line  336)
51546* Wnormalized=:                          Warning Options.    (line 1272)
51547* Wold-style-cast:                       C++ Dialect Options.
51548                                                             (line  603)
51549* Wold-style-declaration:                Warning Options.    (line 1210)
51550* Wold-style-definition:                 Warning Options.    (line 1216)
51551* Woverflow:                             Warning Options.    (line 1324)
51552* Woverlength-strings:                   Warning Options.    (line 1497)
51553* Woverloaded-virtual:                   C++ Dialect Options.
51554                                                             (line  609)
51555* Woverride-init:                        Warning Options.    (line 1327)
51556* Wp:                                    Preprocessor Options.
51557                                                             (line   14)
51558* Wpacked:                               Warning Options.    (line 1335)
51559* Wpacked-bitfield-compat:               Warning Options.    (line 1352)
51560* Wpadded:                               Warning Options.    (line 1369)
51561* Wparentheses:                          Warning Options.    (line  404)
51562* Wpedantic:                             Warning Options.    (line   71)
51563* Wpedantic-ms-format:                   Warning Options.    (line 1020)
51564* Wpmf-conversions:                      C++ Dialect Options.
51565                                                             (line  628)
51566* Wpointer-arith:                        Warning Options.    (line 1026)
51567* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
51568* Wpointer-sign:                         Warning Options.    (line 1482)
51569* Wpointer-to-int-cast:                  Warning Options.    (line 1420)
51570* Wpragmas:                              Warning Options.    (line  691)
51571* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
51572                                                             (line  161)
51573* wrapper:                               Overall Options.    (line  341)
51574* Wredundant-decls:                      Warning Options.    (line 1376)
51575* Wreorder:                              C++ Dialect Options.
51576                                                             (line  527)
51577* Wreturn-local-addr:                    Warning Options.    (line  499)
51578* Wreturn-type:                          Warning Options.    (line  503)
51579* Wselector:                             Objective-C and Objective-C++ Dialect Options.
51580                                                             (line  171)
51581* Wsequence-point:                       Warning Options.    (line  453)
51582* Wshadow:                               Warning Options.    (line  971)
51583* Wsign-compare:                         Warning Options.    (line 1144)
51584* Wsign-conversion:                      Warning Options.    (line 1151)
51585* Wsign-promo:                           C++ Dialect Options.
51586                                                             (line  632)
51587* Wsizeof-pointer-memaccess:             Warning Options.    (line 1157)
51588* Wstack-protector:                      Warning Options.    (line 1488)
51589* Wstack-usage:                          Warning Options.    (line  994)
51590* Wstrict-aliasing:                      Warning Options.    (line  696)
51591* Wstrict-aliasing=n:                    Warning Options.    (line  703)
51592* Wstrict-null-sentinel:                 C++ Dialect Options.
51593                                                             (line  580)
51594* Wstrict-overflow:                      Warning Options.    (line  735)
51595* Wstrict-prototypes:                    Warning Options.    (line 1204)
51596* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
51597                                                             (line  183)
51598* Wsuggest-attribute=:                   Warning Options.    (line  784)
51599* Wsuggest-attribute=const:              Warning Options.    (line  790)
51600* Wsuggest-attribute=format:             Warning Options.    (line  804)
51601* Wsuggest-attribute=noreturn:           Warning Options.    (line  790)
51602* Wsuggest-attribute=pure:               Warning Options.    (line  790)
51603* Wswitch:                               Warning Options.    (line  517)
51604* Wswitch-default:                       Warning Options.    (line  525)
51605* Wswitch-enum:                          Warning Options.    (line  528)
51606* Wsync-nand:                            Warning Options.    (line  537)
51607* Wsystem-headers:                       Warning Options.    (line  835)
51608* Wsystem-headers <1>:                   Preprocessor Options.
51609                                                             (line  165)
51610* Wtraditional:                          Warning Options.    (line  872)
51611* Wtraditional <1>:                      Preprocessor Options.
51612                                                             (line  118)
51613* Wtraditional-conversion:               Warning Options.    (line  949)
51614* Wtrampolines:                          Warning Options.    (line  846)
51615* Wtrigraphs:                            Warning Options.    (line  542)
51616* Wtrigraphs <1>:                        Preprocessor Options.
51617                                                             (line  106)
51618* Wtype-limits:                          Warning Options.    (line 1033)
51619* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
51620                                                             (line  191)
51621* Wundef:                                Warning Options.    (line  964)
51622* Wundef <1>:                            Preprocessor Options.
51623                                                             (line  124)
51624* Wuninitialized:                        Warning Options.    (line  619)
51625* Wunknown-pragmas:                      Warning Options.    (line  684)
51626* Wunsafe-loop-optimizations:            Warning Options.    (line 1014)
51627* Wunsuffixed-float-constants:           Warning Options.    (line 1512)
51628* Wunused:                               Warning Options.    (line  612)
51629* Wunused-but-set-parameter:             Warning Options.    (line  547)
51630* Wunused-but-set-variable:              Warning Options.    (line  556)
51631* Wunused-function:                      Warning Options.    (line  566)
51632* Wunused-label:                         Warning Options.    (line  571)
51633* Wunused-local-typedefs:                Warning Options.    (line  578)
51634* Wunused-macros:                        Preprocessor Options.
51635                                                             (line  129)
51636* Wunused-parameter:                     Warning Options.    (line  582)
51637* Wunused-result:                        Warning Options.    (line  589)
51638* Wunused-value:                         Warning Options.    (line  602)
51639* Wunused-variable:                      Warning Options.    (line  594)
51640* Wuseless-cast:                         Warning Options.    (line 1120)
51641* Wvarargs:                              Warning Options.    (line 1439)
51642* Wvariadic-macros:                      Warning Options.    (line 1433)
51643* Wvector-operation-performance:         Warning Options.    (line 1444)
51644* Wvirtual-move-assign:                  Warning Options.    (line 1454)
51645* Wvla:                                  Warning Options.    (line 1463)
51646* Wvolatile-register-var:                Warning Options.    (line 1467)
51647* Wwrite-strings:                        Warning Options.    (line 1077)
51648* Wzero-as-null-pointer-constant:        Warning Options.    (line 1116)
51649* x:                                     Overall Options.    (line  126)
51650* x <1>:                                 Preprocessor Options.
51651                                                             (line  324)
51652* Xassembler:                            Assembler Options.  (line   13)
51653* Xbind-lazy:                            VxWorks Options.    (line   26)
51654* Xbind-now:                             VxWorks Options.    (line   30)
51655* Xlinker:                               Link Options.       (line  202)
51656* Xpreprocessor:                         Preprocessor Options.
51657                                                             (line   25)
51658* Ym:                                    System V Options.   (line   26)
51659* YP:                                    System V Options.   (line   22)
51660
51661
51662File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
51663
51664Keyword Index
51665*************
51666
51667�[index�]
51668* Menu:
51669
51670* '!' in constraint:                     Multi-Alternative.  (line   33)
51671* '#' in constraint:                     Modifiers.          (line   57)
51672* '#pragma':                             Pragmas.            (line    6)
51673* #pragma implementation:                C++ Interface.      (line   39)
51674* '#pragma implementation', implied:     C++ Interface.      (line   46)
51675* #pragma interface:                     C++ Interface.      (line   20)
51676* '#pragma', reason for not using:       Function Attributes.
51677                                                             (line 1875)
51678* $:                                     Dollar Signs.       (line    6)
51679* '%' in constraint:                     Modifiers.          (line   45)
51680* '%include':                            Spec Files.         (line   26)
51681* '%include_noerr':                      Spec Files.         (line   30)
51682* '%rename':                             Spec Files.         (line   34)
51683* '&' in constraint:                     Modifiers.          (line   25)
51684* ''':                                   Incompatibilities.  (line  116)
51685* '*' in constraint:                     Modifiers.          (line   62)
51686* *__builtin_assume_aligned:             Other Builtins.     (line  332)
51687* '+' in constraint:                     Modifiers.          (line   12)
51688* '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   85)
51689* '-lgcc', use with '-nostdlib':         Link Options.       (line   85)
51690* '-march' feature modifiers:            AArch64 Options.    (line   91)
51691* '-mcpu' feature modifiers:             AArch64 Options.    (line   91)
51692* '-nodefaultlibs' and unresolved references: Link Options.  (line   85)
51693* '-nostdlib' and unresolved references: Link Options.       (line   85)
51694* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
51695                                                             (line  739)
51696* '//':                                  C++ Comments.       (line    6)
51697* '0' in constraint:                     Simple Constraints. (line  125)
51698* '<' in constraint:                     Simple Constraints. (line   47)
51699* '=' in constraint:                     Modifiers.          (line    8)
51700* '>' in constraint:                     Simple Constraints. (line   59)
51701* '?' in constraint:                     Multi-Alternative.  (line   27)
51702* '?:' extensions:                       Conditionals.       (line    6)
51703* '?:' side effect:                      Conditionals.       (line   20)
51704* '_' in variables in macros:            Typeof.             (line   46)
51705* '_Accum' data type:                    Fixed-Point.        (line    6)
51706* '_Complex' keyword:                    Complex.            (line    6)
51707* '_Decimal128' data type:               Decimal Float.      (line    6)
51708* '_Decimal32' data type:                Decimal Float.      (line    6)
51709* '_Decimal64' data type:                Decimal Float.      (line    6)
51710* _Exit:                                 Other Builtins.     (line    6)
51711* _exit:                                 Other Builtins.     (line    6)
51712* '_Fract' data type:                    Fixed-Point.        (line    6)
51713* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
51714                                                             (line   44)
51715* '_Sat' data type:                      Fixed-Point.        (line    6)
51716* _xabort:                               X86 transactional memory intrinsics.
51717                                                             (line   61)
51718* _xbegin:                               X86 transactional memory intrinsics.
51719                                                             (line   19)
51720* _xend:                                 X86 transactional memory intrinsics.
51721                                                             (line   52)
51722* _xtest:                                X86 transactional memory intrinsics.
51723                                                             (line   57)
51724* __atomic_add_fetch:                    __atomic Builtins.  (line  153)
51725* __atomic_always_lock_free:             __atomic Builtins.  (line  230)
51726* __atomic_and_fetch:                    __atomic Builtins.  (line  157)
51727* __atomic_clear:                        __atomic Builtins.  (line  204)
51728* __atomic_compare_exchange:             __atomic Builtins.  (line  145)
51729* __atomic_compare_exchange_n:           __atomic Builtins.  (line  124)
51730* __atomic_exchange:                     __atomic Builtins.  (line  118)
51731* __atomic_exchange_n:                   __atomic Builtins.  (line  108)
51732* __atomic_fetch_add:                    __atomic Builtins.  (line  172)
51733* __atomic_fetch_and:                    __atomic Builtins.  (line  176)
51734* __atomic_fetch_nand:                   __atomic Builtins.  (line  182)
51735* __atomic_fetch_or:                     __atomic Builtins.  (line  180)
51736* __atomic_fetch_sub:                    __atomic Builtins.  (line  174)
51737* __atomic_fetch_xor:                    __atomic Builtins.  (line  178)
51738* __atomic_is_lock_free:                 __atomic Builtins.  (line  244)
51739* __atomic_load:                         __atomic Builtins.  (line   90)
51740* __atomic_load_n:                       __atomic Builtins.  (line   83)
51741* __atomic_nand_fetch:                   __atomic Builtins.  (line  163)
51742* __atomic_or_fetch:                     __atomic Builtins.  (line  161)
51743* __atomic_signal_fence:                 __atomic Builtins.  (line  223)
51744* __atomic_store:                        __atomic Builtins.  (line  103)
51745* __atomic_store_n:                      __atomic Builtins.  (line   95)
51746* __atomic_sub_fetch:                    __atomic Builtins.  (line  155)
51747* __atomic_test_and_set:                 __atomic Builtins.  (line  192)
51748* __atomic_thread_fence:                 __atomic Builtins.  (line  216)
51749* __atomic_xor_fetch:                    __atomic Builtins.  (line  159)
51750* __builtin_apply:                       Constructing Calls. (line   29)
51751* __builtin_apply_args:                  Constructing Calls. (line   19)
51752* __builtin_bswap16:                     Other Builtins.     (line  597)
51753* __builtin_bswap32:                     Other Builtins.     (line  601)
51754* __builtin_bswap64:                     Other Builtins.     (line  605)
51755* __builtin_choose_expr:                 Other Builtins.     (line  154)
51756* __builtin_clrsb:                       Other Builtins.     (line  526)
51757* __builtin_clrsbl:                      Other Builtins.     (line  549)
51758* __builtin_clrsbll:                     Other Builtins.     (line  572)
51759* __builtin_clz:                         Other Builtins.     (line  518)
51760* __builtin_clzl:                        Other Builtins.     (line  541)
51761* __builtin_clzll:                       Other Builtins.     (line  564)
51762* __builtin_complex:                     Other Builtins.     (line  194)
51763* __builtin_constant_p:                  Other Builtins.     (line  203)
51764* __builtin_cpu_init:                    X86 Built-in Functions.
51765                                                             (line   62)
51766* __builtin_cpu_is:                      X86 Built-in Functions.
51767                                                             (line   90)
51768* __builtin_cpu_supports:                X86 Built-in Functions.
51769                                                             (line  159)
51770* __builtin_ctz:                         Other Builtins.     (line  522)
51771* __builtin_ctzl:                        Other Builtins.     (line  545)
51772* __builtin_ctzll:                       Other Builtins.     (line  568)
51773* __builtin_expect:                      Other Builtins.     (line  252)
51774* __builtin_extract_return_addr:         Return Address.     (line   35)
51775* __builtin_ffs:                         Other Builtins.     (line  514)
51776* __builtin_ffsl:                        Other Builtins.     (line  537)
51777* __builtin_ffsll:                       Other Builtins.     (line  560)
51778* __builtin_FILE:                        Other Builtins.     (line  360)
51779* __builtin_fpclassify:                  Other Builtins.     (line    6)
51780* __builtin_fpclassify <1>:              Other Builtins.     (line  429)
51781* __builtin_frame_address:               Return Address.     (line   47)
51782* __builtin_frob_return_address:         Return Address.     (line   44)
51783* __builtin_FUNCTION:                    Other Builtins.     (line  355)
51784* __builtin_huge_val:                    Other Builtins.     (line  417)
51785* __builtin_huge_valf:                   Other Builtins.     (line  422)
51786* __builtin_huge_vall:                   Other Builtins.     (line  425)
51787* __builtin_huge_valq:                   X86 Built-in Functions.
51788                                                             (line   57)
51789* __builtin_inf:                         Other Builtins.     (line  440)
51790* __builtin_infd128:                     Other Builtins.     (line  450)
51791* __builtin_infd32:                      Other Builtins.     (line  444)
51792* __builtin_infd64:                      Other Builtins.     (line  447)
51793* __builtin_inff:                        Other Builtins.     (line  454)
51794* __builtin_infl:                        Other Builtins.     (line  459)
51795* __builtin_infq:                        X86 Built-in Functions.
51796                                                             (line   54)
51797* __builtin_isfinite:                    Other Builtins.     (line    6)
51798* __builtin_isgreater:                   Other Builtins.     (line    6)
51799* __builtin_isgreaterequal:              Other Builtins.     (line    6)
51800* __builtin_isinf_sign:                  Other Builtins.     (line    6)
51801* __builtin_isinf_sign <1>:              Other Builtins.     (line  463)
51802* __builtin_isless:                      Other Builtins.     (line    6)
51803* __builtin_islessequal:                 Other Builtins.     (line    6)
51804* __builtin_islessgreater:               Other Builtins.     (line    6)
51805* __builtin_isnormal:                    Other Builtins.     (line    6)
51806* __builtin_isunordered:                 Other Builtins.     (line    6)
51807* __builtin_LINE:                        Other Builtins.     (line  350)
51808* __builtin_nan:                         Other Builtins.     (line  470)
51809* __builtin_nand128:                     Other Builtins.     (line  492)
51810* __builtin_nand32:                      Other Builtins.     (line  486)
51811* __builtin_nand64:                      Other Builtins.     (line  489)
51812* __builtin_nanf:                        Other Builtins.     (line  496)
51813* __builtin_nanl:                        Other Builtins.     (line  499)
51814* __builtin_nans:                        Other Builtins.     (line  503)
51815* __builtin_nansf:                       Other Builtins.     (line  507)
51816* __builtin_nansl:                       Other Builtins.     (line  510)
51817* __builtin_non_tx_store:                S/390 System z Built-in Functions.
51818                                                             (line   98)
51819* __builtin_object_size:                 Object Size Checking.
51820                                                             (line    6)
51821* __builtin_object_size <1>:             Object Size Checking.
51822                                                             (line    9)
51823* __builtin_offsetof:                    Offsetof.           (line    6)
51824* __builtin_parity:                      Other Builtins.     (line  534)
51825* __builtin_parityl:                     Other Builtins.     (line  556)
51826* __builtin_parityll:                    Other Builtins.     (line  580)
51827* __builtin_popcount:                    Other Builtins.     (line  531)
51828* __builtin_popcountl:                   Other Builtins.     (line  552)
51829* __builtin_popcountll:                  Other Builtins.     (line  576)
51830* __builtin_powi:                        Other Builtins.     (line    6)
51831* __builtin_powi <1>:                    Other Builtins.     (line  584)
51832* __builtin_powif:                       Other Builtins.     (line    6)
51833* __builtin_powif <1>:                   Other Builtins.     (line  589)
51834* __builtin_powil:                       Other Builtins.     (line    6)
51835* __builtin_powil <1>:                   Other Builtins.     (line  593)
51836* __builtin_prefetch:                    Other Builtins.     (line  378)
51837* __builtin_return:                      Constructing Calls. (line   47)
51838* __builtin_return_address:              Return Address.     (line    9)
51839* __builtin_rx_brk:                      RX Built-in Functions.
51840                                                             (line   10)
51841* __builtin_rx_clrpsw:                   RX Built-in Functions.
51842                                                             (line   13)
51843* __builtin_rx_int:                      RX Built-in Functions.
51844                                                             (line   17)
51845* __builtin_rx_machi:                    RX Built-in Functions.
51846                                                             (line   21)
51847* __builtin_rx_maclo:                    RX Built-in Functions.
51848                                                             (line   26)
51849* __builtin_rx_mulhi:                    RX Built-in Functions.
51850                                                             (line   31)
51851* __builtin_rx_mullo:                    RX Built-in Functions.
51852                                                             (line   36)
51853* __builtin_rx_mvfachi:                  RX Built-in Functions.
51854                                                             (line   41)
51855* __builtin_rx_mvfacmi:                  RX Built-in Functions.
51856                                                             (line   45)
51857* __builtin_rx_mvfc:                     RX Built-in Functions.
51858                                                             (line   49)
51859* __builtin_rx_mvtachi:                  RX Built-in Functions.
51860                                                             (line   53)
51861* __builtin_rx_mvtaclo:                  RX Built-in Functions.
51862                                                             (line   57)
51863* __builtin_rx_mvtc:                     RX Built-in Functions.
51864                                                             (line   61)
51865* __builtin_rx_mvtipl:                   RX Built-in Functions.
51866                                                             (line   65)
51867* __builtin_rx_racw:                     RX Built-in Functions.
51868                                                             (line   69)
51869* __builtin_rx_revw:                     RX Built-in Functions.
51870                                                             (line   73)
51871* __builtin_rx_rmpa:                     RX Built-in Functions.
51872                                                             (line   78)
51873* __builtin_rx_round:                    RX Built-in Functions.
51874                                                             (line   82)
51875* __builtin_rx_sat:                      RX Built-in Functions.
51876                                                             (line   87)
51877* __builtin_rx_setpsw:                   RX Built-in Functions.
51878                                                             (line   91)
51879* __builtin_rx_wait:                     RX Built-in Functions.
51880                                                             (line   95)
51881* __builtin_set_thread_pointer:          SH Built-in Functions.
51882                                                             (line    9)
51883* __builtin_tabort:                      S/390 System z Built-in Functions.
51884                                                             (line   82)
51885* __builtin_tbegin:                      S/390 System z Built-in Functions.
51886                                                             (line    6)
51887* __builtin_tbeginc:                     S/390 System z Built-in Functions.
51888                                                             (line   73)
51889* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
51890                                                             (line   54)
51891* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
51892                                                             (line   60)
51893* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
51894                                                             (line   67)
51895* __builtin_tend:                        S/390 System z Built-in Functions.
51896                                                             (line   77)
51897* __builtin_thread_pointer:              SH Built-in Functions.
51898                                                             (line   18)
51899* __builtin_trap:                        Other Builtins.     (line  276)
51900* __builtin_tx_assist:                   S/390 System z Built-in Functions.
51901                                                             (line   87)
51902* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
51903                                                             (line   93)
51904* __builtin_types_compatible_p:          Other Builtins.     (line  109)
51905* __builtin_unreachable:                 Other Builtins.     (line  283)
51906* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
51907* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
51908* __builtin___clear_cache:               Other Builtins.     (line  365)
51909* __builtin___fprintf_chk:               Object Size Checking.
51910                                                             (line    6)
51911* __builtin___memcpy_chk:                Object Size Checking.
51912                                                             (line    6)
51913* __builtin___memmove_chk:               Object Size Checking.
51914                                                             (line    6)
51915* __builtin___mempcpy_chk:               Object Size Checking.
51916                                                             (line    6)
51917* __builtin___memset_chk:                Object Size Checking.
51918                                                             (line    6)
51919* __builtin___printf_chk:                Object Size Checking.
51920                                                             (line    6)
51921* __builtin___snprintf_chk:              Object Size Checking.
51922                                                             (line    6)
51923* __builtin___sprintf_chk:               Object Size Checking.
51924                                                             (line    6)
51925* __builtin___stpcpy_chk:                Object Size Checking.
51926                                                             (line    6)
51927* __builtin___strcat_chk:                Object Size Checking.
51928                                                             (line    6)
51929* __builtin___strcpy_chk:                Object Size Checking.
51930                                                             (line    6)
51931* __builtin___strncat_chk:               Object Size Checking.
51932                                                             (line    6)
51933* __builtin___strncpy_chk:               Object Size Checking.
51934                                                             (line    6)
51935* __builtin___vfprintf_chk:              Object Size Checking.
51936                                                             (line    6)
51937* __builtin___vprintf_chk:               Object Size Checking.
51938                                                             (line    6)
51939* __builtin___vsnprintf_chk:             Object Size Checking.
51940                                                             (line    6)
51941* __builtin___vsprintf_chk:              Object Size Checking.
51942                                                             (line    6)
51943* '__complex__' keyword:                 Complex.            (line    6)
51944* '__declspec(dllexport)':               Function Attributes.
51945                                                             (line  256)
51946* '__declspec(dllimport)':               Function Attributes.
51947                                                             (line  289)
51948* '__ea' SPU Named Address Spaces:       Named Address Spaces.
51949                                                             (line  155)
51950* __extension__:                         Alternate Keywords. (line   30)
51951* '__far' M32C Named Address Spaces:     Named Address Spaces.
51952                                                             (line  138)
51953* '__far' RL78 Named Address Spaces:     Named Address Spaces.
51954                                                             (line  147)
51955* '__flash' AVR Named Address Spaces:    Named Address Spaces.
51956                                                             (line   31)
51957* '__flash1' AVR Named Address Spaces:   Named Address Spaces.
51958                                                             (line   40)
51959* '__flash2' AVR Named Address Spaces:   Named Address Spaces.
51960                                                             (line   40)
51961* '__flash3' AVR Named Address Spaces:   Named Address Spaces.
51962                                                             (line   40)
51963* '__flash4' AVR Named Address Spaces:   Named Address Spaces.
51964                                                             (line   40)
51965* '__flash5' AVR Named Address Spaces:   Named Address Spaces.
51966                                                             (line   40)
51967* '__float128' data type:                Floating Types.     (line    6)
51968* '__float80' data type:                 Floating Types.     (line    6)
51969* '__fp16' data type:                    Half-Precision.     (line    6)
51970* '__FUNCTION__' identifier:             Function Names.     (line    6)
51971* '__func__' identifier:                 Function Names.     (line    6)
51972* '__imag__' keyword:                    Complex.            (line   27)
51973* '__int128' data types:                 __int128.           (line    6)
51974* '__memx' AVR Named Address Spaces:     Named Address Spaces.
51975                                                             (line   46)
51976* '__PRETTY_FUNCTION__' identifier:      Function Names.     (line    6)
51977* '__real__' keyword:                    Complex.            (line   27)
51978* __STDC_HOSTED__:                       Standards.          (line   13)
51979* __sync_add_and_fetch:                  __sync Builtins.    (line   60)
51980* __sync_and_and_fetch:                  __sync Builtins.    (line   60)
51981* __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
51982* __sync_fetch_and_add:                  __sync Builtins.    (line   44)
51983* __sync_fetch_and_and:                  __sync Builtins.    (line   44)
51984* __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
51985* __sync_fetch_and_or:                   __sync Builtins.    (line   44)
51986* __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
51987* __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
51988* __sync_lock_release:                   __sync Builtins.    (line  101)
51989* __sync_lock_test_and_set:              __sync Builtins.    (line   83)
51990* __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
51991* __sync_or_and_fetch:                   __sync Builtins.    (line   60)
51992* __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
51993* __sync_synchronize:                    __sync Builtins.    (line   80)
51994* __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
51995* __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
51996* '__thread':                            Thread-Local.       (line    6)
51997* AArch64 Options:                       AArch64 Options.    (line    6)
51998* ABI:                                   Compatibility.      (line    6)
51999* 'abi_tag' attribute:                   C++ Attributes.     (line    9)
52000* abort:                                 Other Builtins.     (line    6)
52001* abs:                                   Other Builtins.     (line    6)
52002* accessing volatiles:                   Volatiles.          (line    6)
52003* accessing volatiles <1>:               C++ Volatiles.      (line    6)
52004* acos:                                  Other Builtins.     (line    6)
52005* acosf:                                 Other Builtins.     (line    6)
52006* acosh:                                 Other Builtins.     (line    6)
52007* acoshf:                                Other Builtins.     (line    6)
52008* acoshl:                                Other Builtins.     (line    6)
52009* acosl:                                 Other Builtins.     (line    6)
52010* Ada:                                   G++ and GCC.        (line    6)
52011* Ada <1>:                               G++ and GCC.        (line   30)
52012* additional floating types:             Floating Types.     (line    6)
52013* address constraints:                   Simple Constraints. (line  152)
52014* address of a label:                    Labels as Values.   (line    6)
52015* address_operand:                       Simple Constraints. (line  156)
52016* 'alias' attribute:                     Function Attributes.
52017                                                             (line   37)
52018* 'aligned' attribute:                   Function Attributes.
52019                                                             (line   50)
52020* 'aligned' attribute <1>:               Variable Attributes.
52021                                                             (line   23)
52022* 'aligned' attribute <2>:               Type Attributes.    (line   31)
52023* alignment:                             Alignment.          (line    6)
52024* alloca:                                Other Builtins.     (line    6)
52025* 'alloca' vs variable-length arrays:    Variable Length.    (line   26)
52026* 'alloc_size' attribute:                Function Attributes.
52027                                                             (line   70)
52028* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
52029                                                             (line  942)
52030* alternate keywords:                    Alternate Keywords. (line    6)
52031* 'always_inline' function attribute:    Function Attributes.
52032                                                             (line   91)
52033* AMD x86-64 Options:                    i386 and x86-64 Options.
52034                                                             (line    6)
52035* AMD1:                                  Standards.          (line   13)
52036* ANSI C:                                Standards.          (line   13)
52037* ANSI C standard:                       Standards.          (line   13)
52038* ANSI C89:                              Standards.          (line   13)
52039* ANSI support:                          C Dialect Options.  (line   10)
52040* ANSI X3.159-1989:                      Standards.          (line   13)
52041* apostrophes:                           Incompatibilities.  (line  116)
52042* application binary interface:          Compatibility.      (line    6)
52043* ARM options:                           ARM Options.        (line    6)
52044* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
52045                                                             (line    6)
52046* arrays of length zero:                 Zero Length.        (line    6)
52047* arrays of variable length:             Variable Length.    (line    6)
52048* arrays, non-lvalue:                    Subscripting.       (line    6)
52049* 'artificial' function attribute:       Function Attributes.
52050                                                             (line  132)
52051* asin:                                  Other Builtins.     (line    6)
52052* asinf:                                 Other Builtins.     (line    6)
52053* asinh:                                 Other Builtins.     (line    6)
52054* asinhf:                                Other Builtins.     (line    6)
52055* asinhl:                                Other Builtins.     (line    6)
52056* asinl:                                 Other Builtins.     (line    6)
52057* 'asm' constraints:                     Constraints.        (line    6)
52058* 'asm' expressions:                     Extended Asm.       (line    6)
52059* assembler instructions:                Extended Asm.       (line    6)
52060* assembler names for identifiers:       Asm Labels.         (line    6)
52061* assembly code, invalid:                Bug Criteria.       (line   12)
52062* atan:                                  Other Builtins.     (line    6)
52063* atan2:                                 Other Builtins.     (line    6)
52064* atan2f:                                Other Builtins.     (line    6)
52065* atan2l:                                Other Builtins.     (line    6)
52066* atanf:                                 Other Builtins.     (line    6)
52067* atanh:                                 Other Builtins.     (line    6)
52068* atanhf:                                Other Builtins.     (line    6)
52069* atanhl:                                Other Builtins.     (line    6)
52070* atanl:                                 Other Builtins.     (line    6)
52071* attribute of types:                    Type Attributes.    (line    6)
52072* attribute of variables:                Variable Attributes.
52073                                                             (line    6)
52074* attribute syntax:                      Attribute Syntax.   (line    6)
52075* autoincrement/decrement addressing:    Simple Constraints. (line   30)
52076* automatic 'inline' for C++ member fns: Inline.             (line   71)
52077* AVR Options:                           AVR Options.        (line    6)
52078* Backwards Compatibility:               Backwards Compatibility.
52079                                                             (line    6)
52080* base class members:                    Name lookup.        (line    6)
52081* bcmp:                                  Other Builtins.     (line    6)
52082* 'below100' attribute:                  Variable Attributes.
52083                                                             (line  578)
52084* binary compatibility:                  Compatibility.      (line    6)
52085* Binary constants using the '0b' prefix: Binary constants.  (line    6)
52086* Blackfin Options:                      Blackfin Options.   (line    6)
52087* bound pointer to member function:      Bound member functions.
52088                                                             (line    6)
52089* bounds checking:                       Optimize Options.   (line  404)
52090* bug criteria:                          Bug Criteria.       (line    6)
52091* bugs:                                  Bugs.               (line    6)
52092* bugs, known:                           Trouble.            (line    6)
52093* built-in functions:                    C Dialect Options.  (line  204)
52094* built-in functions <1>:                Other Builtins.     (line    6)
52095* bzero:                                 Other Builtins.     (line    6)
52096* C compilation options:                 Invoking GCC.       (line   17)
52097* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
52098* C language extensions:                 C Extensions.       (line    6)
52099* C language, traditional:               C Dialect Options.  (line  309)
52100* C standard:                            Standards.          (line   13)
52101* C standards:                           Standards.          (line   13)
52102* c++:                                   Invoking G++.       (line   14)
52103* C++:                                   G++ and GCC.        (line   30)
52104* C++ comments:                          C++ Comments.       (line    6)
52105* C++ compilation options:               Invoking GCC.       (line   23)
52106* C++ interface and implementation headers: C++ Interface.   (line    6)
52107* C++ language extensions:               C++ Extensions.     (line    6)
52108* C++ member fns, automatically 'inline': Inline.            (line   71)
52109* C++ misunderstandings:                 C++ Misunderstandings.
52110                                                             (line    6)
52111* C++ options, command-line:             C++ Dialect Options.
52112                                                             (line    6)
52113* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
52114* C++ source file suffixes:              Invoking G++.       (line    6)
52115* C++ static data, declaring and defining: Static Definitions.
52116                                                             (line    6)
52117* C11:                                   Standards.          (line   13)
52118* C1X:                                   Standards.          (line   13)
52119* C6X Options:                           C6X Options.        (line    6)
52120* C89:                                   Standards.          (line   13)
52121* C90:                                   Standards.          (line   13)
52122* C94:                                   Standards.          (line   13)
52123* C95:                                   Standards.          (line   13)
52124* C99:                                   Standards.          (line   13)
52125* C9X:                                   Standards.          (line   13)
52126* cabs:                                  Other Builtins.     (line    6)
52127* cabsf:                                 Other Builtins.     (line    6)
52128* cabsl:                                 Other Builtins.     (line    6)
52129* cacos:                                 Other Builtins.     (line    6)
52130* cacosf:                                Other Builtins.     (line    6)
52131* cacosh:                                Other Builtins.     (line    6)
52132* cacoshf:                               Other Builtins.     (line    6)
52133* cacoshl:                               Other Builtins.     (line    6)
52134* cacosl:                                Other Builtins.     (line    6)
52135* 'callee_pop_aggregate_return' attribute: Function Attributes.
52136                                                             (line  890)
52137* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
52138                                                             (line  525)
52139* calloc:                                Other Builtins.     (line    6)
52140* carg:                                  Other Builtins.     (line    6)
52141* cargf:                                 Other Builtins.     (line    6)
52142* cargl:                                 Other Builtins.     (line    6)
52143* case labels in initializers:           Designated Inits.   (line    6)
52144* case ranges:                           Case Ranges.        (line    6)
52145* casin:                                 Other Builtins.     (line    6)
52146* casinf:                                Other Builtins.     (line    6)
52147* casinh:                                Other Builtins.     (line    6)
52148* casinhf:                               Other Builtins.     (line    6)
52149* casinhl:                               Other Builtins.     (line    6)
52150* casinl:                                Other Builtins.     (line    6)
52151* cast to a union:                       Cast to Union.      (line    6)
52152* catan:                                 Other Builtins.     (line    6)
52153* catanf:                                Other Builtins.     (line    6)
52154* catanh:                                Other Builtins.     (line    6)
52155* catanhf:                               Other Builtins.     (line    6)
52156* catanhl:                               Other Builtins.     (line    6)
52157* catanl:                                Other Builtins.     (line    6)
52158* cbrt:                                  Other Builtins.     (line    6)
52159* cbrtf:                                 Other Builtins.     (line    6)
52160* cbrtl:                                 Other Builtins.     (line    6)
52161* ccos:                                  Other Builtins.     (line    6)
52162* ccosf:                                 Other Builtins.     (line    6)
52163* ccosh:                                 Other Builtins.     (line    6)
52164* ccoshf:                                Other Builtins.     (line    6)
52165* ccoshl:                                Other Builtins.     (line    6)
52166* ccosl:                                 Other Builtins.     (line    6)
52167* ceil:                                  Other Builtins.     (line    6)
52168* ceilf:                                 Other Builtins.     (line    6)
52169* ceill:                                 Other Builtins.     (line    6)
52170* cexp:                                  Other Builtins.     (line    6)
52171* cexpf:                                 Other Builtins.     (line    6)
52172* cexpl:                                 Other Builtins.     (line    6)
52173* character set, execution:              Preprocessor Options.
52174                                                             (line  554)
52175* character set, input:                  Preprocessor Options.
52176                                                             (line  567)
52177* character set, input normalization:    Warning Options.    (line 1272)
52178* character set, wide execution:         Preprocessor Options.
52179                                                             (line  559)
52180* cimag:                                 Other Builtins.     (line    6)
52181* cimagf:                                Other Builtins.     (line    6)
52182* cimagl:                                Other Builtins.     (line    6)
52183* 'cleanup' attribute:                   Variable Attributes.
52184                                                             (line   89)
52185* clog:                                  Other Builtins.     (line    6)
52186* clogf:                                 Other Builtins.     (line    6)
52187* clogl:                                 Other Builtins.     (line    6)
52188* COBOL:                                 G++ and GCC.        (line   23)
52189* code generation conventions:           Code Gen Options.   (line    6)
52190* code, mixed with declarations:         Mixed Declarations. (line    6)
52191* 'cold' function attribute:             Function Attributes.
52192                                                             (line 1165)
52193* 'cold' label attribute:                Function Attributes.
52194                                                             (line 1183)
52195* command options:                       Invoking GCC.       (line    6)
52196* comments, C++ style:                   C++ Comments.       (line    6)
52197* 'common' attribute:                    Variable Attributes.
52198                                                             (line  104)
52199* comparison of signed and unsigned values, warning: Warning Options.
52200                                                             (line 1144)
52201* compiler bugs, reporting:              Bug Reporting.      (line    6)
52202* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
52203* compiler options, C++:                 C++ Dialect Options.
52204                                                             (line    6)
52205* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52206                                                             (line    6)
52207* compiler version, specifying:          Target Options.     (line    6)
52208* COMPILER_PATH:                         Environment Variables.
52209                                                             (line   91)
52210* complex conjugation:                   Complex.            (line   34)
52211* complex numbers:                       Complex.            (line    6)
52212* compound literals:                     Compound Literals.  (line    6)
52213* computed gotos:                        Labels as Values.   (line    6)
52214* conditional expressions, extensions:   Conditionals.       (line    6)
52215* conflicting types:                     Disappointments.    (line   21)
52216* conj:                                  Other Builtins.     (line    6)
52217* conjf:                                 Other Builtins.     (line    6)
52218* conjl:                                 Other Builtins.     (line    6)
52219* 'const' applied to function:           Function Attributes.
52220                                                             (line    6)
52221* 'const' function attribute:            Function Attributes.
52222                                                             (line  181)
52223* constants in constraints:              Simple Constraints. (line   68)
52224* constraint modifier characters:        Modifiers.          (line    6)
52225* constraint, matching:                  Simple Constraints. (line  137)
52226* constraints, 'asm':                    Constraints.        (line    6)
52227* constraints, machine specific:         Machine Constraints.
52228                                                             (line    6)
52229* constructing calls:                    Constructing Calls. (line    6)
52230* constructor expressions:               Compound Literals.  (line    6)
52231* 'constructor' function attribute:      Function Attributes.
52232                                                             (line  209)
52233* contributors:                          Contributors.       (line    6)
52234* copysign:                              Other Builtins.     (line    6)
52235* copysignf:                             Other Builtins.     (line    6)
52236* copysignl:                             Other Builtins.     (line    6)
52237* core dump:                             Bug Criteria.       (line    9)
52238* cos:                                   Other Builtins.     (line    6)
52239* cosf:                                  Other Builtins.     (line    6)
52240* cosh:                                  Other Builtins.     (line    6)
52241* coshf:                                 Other Builtins.     (line    6)
52242* coshl:                                 Other Builtins.     (line    6)
52243* cosl:                                  Other Builtins.     (line    6)
52244* CPATH:                                 Environment Variables.
52245                                                             (line  127)
52246* CPLUS_INCLUDE_PATH:                    Environment Variables.
52247                                                             (line  129)
52248* cpow:                                  Other Builtins.     (line    6)
52249* cpowf:                                 Other Builtins.     (line    6)
52250* cpowl:                                 Other Builtins.     (line    6)
52251* cproj:                                 Other Builtins.     (line    6)
52252* cprojf:                                Other Builtins.     (line    6)
52253* cprojl:                                Other Builtins.     (line    6)
52254* CR16 Options:                          CR16 Options.       (line    6)
52255* creal:                                 Other Builtins.     (line    6)
52256* crealf:                                Other Builtins.     (line    6)
52257* creall:                                Other Builtins.     (line    6)
52258* CRIS Options:                          CRIS Options.       (line    6)
52259* cross compiling:                       Target Options.     (line    6)
52260* csin:                                  Other Builtins.     (line    6)
52261* csinf:                                 Other Builtins.     (line    6)
52262* csinh:                                 Other Builtins.     (line    6)
52263* csinhf:                                Other Builtins.     (line    6)
52264* csinhl:                                Other Builtins.     (line    6)
52265* csinl:                                 Other Builtins.     (line    6)
52266* csqrt:                                 Other Builtins.     (line    6)
52267* csqrtf:                                Other Builtins.     (line    6)
52268* csqrtl:                                Other Builtins.     (line    6)
52269* ctan:                                  Other Builtins.     (line    6)
52270* ctanf:                                 Other Builtins.     (line    6)
52271* ctanh:                                 Other Builtins.     (line    6)
52272* ctanhf:                                Other Builtins.     (line    6)
52273* ctanhl:                                Other Builtins.     (line    6)
52274* ctanl:                                 Other Builtins.     (line    6)
52275* C_INCLUDE_PATH:                        Environment Variables.
52276                                                             (line  128)
52277* Darwin options:                        Darwin Options.     (line    6)
52278* dcgettext:                             Other Builtins.     (line    6)
52279* 'dd' integer suffix:                   Decimal Float.      (line    6)
52280* 'DD' integer suffix:                   Decimal Float.      (line    6)
52281* deallocating variable length arrays:   Variable Length.    (line   22)
52282* debugging information options:         Debugging Options.  (line    6)
52283* decimal floating types:                Decimal Float.      (line    6)
52284* declaration scope:                     Incompatibilities.  (line   80)
52285* declarations inside expressions:       Statement Exprs.    (line    6)
52286* declarations, mixed with code:         Mixed Declarations. (line    6)
52287* declaring attributes of functions:     Function Attributes.
52288                                                             (line    6)
52289* declaring static data in C++:          Static Definitions. (line    6)
52290* defining static data in C++:           Static Definitions. (line    6)
52291* dependencies for make as output:       Environment Variables.
52292                                                             (line  155)
52293* dependencies for make as output <1>:   Environment Variables.
52294                                                             (line  171)
52295* dependencies, 'make':                  Preprocessor Options.
52296                                                             (line  185)
52297* DEPENDENCIES_OUTPUT:                   Environment Variables.
52298                                                             (line  154)
52299* dependent name lookup:                 Name lookup.        (line    6)
52300* 'deprecated' attribute:                Variable Attributes.
52301                                                             (line  113)
52302* 'deprecated' attribute.:               Function Attributes.
52303                                                             (line  231)
52304* designated initializers:               Designated Inits.   (line    6)
52305* designator lists:                      Designated Inits.   (line   93)
52306* designators:                           Designated Inits.   (line   61)
52307* 'destructor' function attribute:       Function Attributes.
52308                                                             (line  209)
52309* 'df' integer suffix:                   Decimal Float.      (line    6)
52310* 'DF' integer suffix:                   Decimal Float.      (line    6)
52311* dgettext:                              Other Builtins.     (line    6)
52312* diagnostic messages:                   Language Independent Options.
52313                                                             (line    6)
52314* dialect options:                       C Dialect Options.  (line    6)
52315* digits in constraint:                  Simple Constraints. (line  125)
52316* directory options:                     Directory Options.  (line    6)
52317* 'disinterrupt' attribute:              Function Attributes.
52318                                                             (line  251)
52319* 'dl' integer suffix:                   Decimal Float.      (line    6)
52320* 'DL' integer suffix:                   Decimal Float.      (line    6)
52321* dollar signs in identifier names:      Dollar Signs.       (line    6)
52322* double-word arithmetic:                Long Long.          (line    6)
52323* downward funargs:                      Nested Functions.   (line    6)
52324* drem:                                  Other Builtins.     (line    6)
52325* dremf:                                 Other Builtins.     (line    6)
52326* dreml:                                 Other Builtins.     (line    6)
52327* 'E' in constraint:                     Simple Constraints. (line   87)
52328* earlyclobber operand:                  Modifiers.          (line   25)
52329* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
52330                                                             (line  341)
52331* 'EIND':                                AVR Options.        (line  222)
52332* empty structures:                      Empty Structures.   (line    6)
52333* environment variables:                 Environment Variables.
52334                                                             (line    6)
52335* erf:                                   Other Builtins.     (line    6)
52336* erfc:                                  Other Builtins.     (line    6)
52337* erfcf:                                 Other Builtins.     (line    6)
52338* erfcl:                                 Other Builtins.     (line    6)
52339* erff:                                  Other Builtins.     (line    6)
52340* erfl:                                  Other Builtins.     (line    6)
52341* 'error' function attribute:            Function Attributes.
52342                                                             (line  151)
52343* error messages:                        Warnings and Errors.
52344                                                             (line    6)
52345* escaped newlines:                      Escaped Newlines.   (line    6)
52346* exception handler functions on the Blackfin processor: Function Attributes.
52347                                                             (line  351)
52348* exclamation point:                     Multi-Alternative.  (line   33)
52349* exit:                                  Other Builtins.     (line    6)
52350* exp:                                   Other Builtins.     (line    6)
52351* exp10:                                 Other Builtins.     (line    6)
52352* exp10f:                                Other Builtins.     (line    6)
52353* exp10l:                                Other Builtins.     (line    6)
52354* exp2:                                  Other Builtins.     (line    6)
52355* exp2f:                                 Other Builtins.     (line    6)
52356* exp2l:                                 Other Builtins.     (line    6)
52357* expf:                                  Other Builtins.     (line    6)
52358* expl:                                  Other Builtins.     (line    6)
52359* explicit register variables:           Explicit Reg Vars.  (line    6)
52360* expm1:                                 Other Builtins.     (line    6)
52361* expm1f:                                Other Builtins.     (line    6)
52362* expm1l:                                Other Builtins.     (line    6)
52363* expressions containing statements:     Statement Exprs.    (line    6)
52364* expressions, constructor:              Compound Literals.  (line    6)
52365* extended 'asm':                        Extended Asm.       (line    6)
52366* extensible constraints:                Simple Constraints. (line  161)
52367* extensions, '?:':                      Conditionals.       (line    6)
52368* extensions, C language:                C Extensions.       (line    6)
52369* extensions, C++ language:              C++ Extensions.     (line    6)
52370* external declaration scope:            Incompatibilities.  (line   80)
52371* 'externally_visible' attribute.:       Function Attributes.
52372                                                             (line  357)
52373* 'F' in constraint:                     Simple Constraints. (line   92)
52374* fabs:                                  Other Builtins.     (line    6)
52375* fabsf:                                 Other Builtins.     (line    6)
52376* fabsl:                                 Other Builtins.     (line    6)
52377* fatal signal:                          Bug Criteria.       (line    9)
52378* fdim:                                  Other Builtins.     (line    6)
52379* fdimf:                                 Other Builtins.     (line    6)
52380* fdiml:                                 Other Builtins.     (line    6)
52381* FDL, GNU Free Documentation License:   GNU Free Documentation License.
52382                                                             (line    6)
52383* ffs:                                   Other Builtins.     (line    6)
52384* file name suffix:                      Overall Options.    (line   14)
52385* file names:                            Link Options.       (line   10)
52386* fixed-point types:                     Fixed-Point.        (line    6)
52387* 'flatten' function attribute:          Function Attributes.
52388                                                             (line  144)
52389* flexible array members:                Zero Length.        (line    6)
52390* 'float' as function value type:        Incompatibilities.  (line  141)
52391* floating point precision:              Disappointments.    (line   68)
52392* floating-point precision:              Optimize Options.   (line 1868)
52393* floor:                                 Other Builtins.     (line    6)
52394* floorf:                                Other Builtins.     (line    6)
52395* floorl:                                Other Builtins.     (line    6)
52396* fma:                                   Other Builtins.     (line    6)
52397* fmaf:                                  Other Builtins.     (line    6)
52398* fmal:                                  Other Builtins.     (line    6)
52399* fmax:                                  Other Builtins.     (line    6)
52400* fmaxf:                                 Other Builtins.     (line    6)
52401* fmaxl:                                 Other Builtins.     (line    6)
52402* fmin:                                  Other Builtins.     (line    6)
52403* fminf:                                 Other Builtins.     (line    6)
52404* fminl:                                 Other Builtins.     (line    6)
52405* fmod:                                  Other Builtins.     (line    6)
52406* fmodf:                                 Other Builtins.     (line    6)
52407* fmodl:                                 Other Builtins.     (line    6)
52408* 'force_align_arg_pointer' attribute:   Function Attributes.
52409                                                             (line 1225)
52410* 'format' function attribute:           Function Attributes.
52411                                                             (line  414)
52412* 'format_arg' function attribute:       Function Attributes.
52413                                                             (line  479)
52414* Fortran:                               G++ and GCC.        (line    6)
52415* 'forwarder_section' attribute:         Function Attributes.
52416                                                             (line  680)
52417* forwarding calls:                      Constructing Calls. (line    6)
52418* fprintf:                               Other Builtins.     (line    6)
52419* fprintf_unlocked:                      Other Builtins.     (line    6)
52420* fputs:                                 Other Builtins.     (line    6)
52421* fputs_unlocked:                        Other Builtins.     (line    6)
52422* FR30 Options:                          FR30 Options.       (line    6)
52423* freestanding environment:              Standards.          (line   13)
52424* freestanding implementation:           Standards.          (line   13)
52425* frexp:                                 Other Builtins.     (line    6)
52426* frexpf:                                Other Builtins.     (line    6)
52427* frexpl:                                Other Builtins.     (line    6)
52428* FRV Options:                           FRV Options.        (line    6)
52429* fscanf:                                Other Builtins.     (line    6)
52430* 'fscanf', and constant strings:        Incompatibilities.  (line   17)
52431* function addressability on the M32R/D: Function Attributes.
52432                                                             (line  848)
52433* function attributes:                   Function Attributes.
52434                                                             (line    6)
52435* function pointers, arithmetic:         Pointer Arith.      (line    6)
52436* function prototype declarations:       Function Prototypes.
52437                                                             (line    6)
52438* function versions:                     Function Multiversioning.
52439                                                             (line    6)
52440* function without a prologue/epilogue code: Function Attributes.
52441                                                             (line  920)
52442* function, size of pointer to:          Pointer Arith.      (line    6)
52443* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
52444                                                             (line  802)
52445* functions in arbitrary sections:       Function Attributes.
52446                                                             (line    6)
52447* functions that are dynamically resolved: Function Attributes.
52448                                                             (line    6)
52449* functions that are passed arguments in registers on the 386: Function Attributes.
52450                                                             (line    6)
52451* functions that are passed arguments in registers on the 386 <1>: Function Attributes.
52452                                                             (line 1201)
52453* functions that behave like malloc:     Function Attributes.
52454                                                             (line    6)
52455* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
52456                                                             (line  932)
52457* functions that do not pop the argument stack on the 386: Function Attributes.
52458                                                             (line    6)
52459* functions that do pop the argument stack on the 386: Function Attributes.
52460                                                             (line  175)
52461* functions that handle memory bank switching: Function Attributes.
52462                                                             (line  370)
52463* functions that have different compilation options on the 386: Function Attributes.
52464                                                             (line    6)
52465* functions that have different optimization options: Function Attributes.
52466                                                             (line    6)
52467* functions that have no side effects:   Function Attributes.
52468                                                             (line    6)
52469* functions that never return:           Function Attributes.
52470                                                             (line    6)
52471* functions that pop the argument stack on the 386: Function Attributes.
52472                                                             (line    6)
52473* functions that pop the argument stack on the 386 <1>: Function Attributes.
52474                                                             (line  396)
52475* functions that pop the argument stack on the 386 <2>: Function Attributes.
52476                                                             (line  404)
52477* functions that pop the argument stack on the 386 <3>: Function Attributes.
52478                                                             (line 1348)
52479* functions that return more than once:  Function Attributes.
52480                                                             (line    6)
52481* functions with non-null pointer arguments: Function Attributes.
52482                                                             (line    6)
52483* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes.
52484                                                             (line    6)
52485* 'G' in constraint:                     Simple Constraints. (line   96)
52486* 'g' in constraint:                     Simple Constraints. (line  118)
52487* g++:                                   Invoking G++.       (line   14)
52488* G++:                                   G++ and GCC.        (line   30)
52489* gamma:                                 Other Builtins.     (line    6)
52490* gammaf:                                Other Builtins.     (line    6)
52491* gammaf_r:                              Other Builtins.     (line    6)
52492* gammal:                                Other Builtins.     (line    6)
52493* gammal_r:                              Other Builtins.     (line    6)
52494* gamma_r:                               Other Builtins.     (line    6)
52495* GCC:                                   G++ and GCC.        (line    6)
52496* GCC command options:                   Invoking GCC.       (line    6)
52497* GCC_COMPARE_DEBUG:                     Environment Variables.
52498                                                             (line   52)
52499* GCC_EXEC_PREFIX:                       Environment Variables.
52500                                                             (line   57)
52501* 'gcc_struct':                          Type Attributes.    (line  323)
52502* 'gcc_struct' attribute:                Variable Attributes.
52503                                                             (line  438)
52504* 'gcov':                                Debugging Options.  (line  408)
52505* gettext:                               Other Builtins.     (line    6)
52506* global offset table:                   Code Gen Options.   (line  266)
52507* global register after 'longjmp':       Global Reg Vars.    (line   65)
52508* global register variables:             Global Reg Vars.    (line    6)
52509* GNAT:                                  G++ and GCC.        (line   30)
52510* GNU C Compiler:                        G++ and GCC.        (line    6)
52511* GNU Compiler Collection:               G++ and GCC.        (line    6)
52512* 'gnu_inline' function attribute:       Function Attributes.
52513                                                             (line   96)
52514* Go:                                    G++ and GCC.        (line    6)
52515* goto with computed label:              Labels as Values.   (line    6)
52516* 'gprof':                               Debugging Options.  (line  333)
52517* grouping options:                      Invoking GCC.       (line   26)
52518* 'H' in constraint:                     Simple Constraints. (line   96)
52519* half-precision floating point:         Half-Precision.     (line    6)
52520* hardware models and configurations, specifying: Submodel Options.
52521                                                             (line    6)
52522* hex floats:                            Hex Floats.         (line    6)
52523* 'hk' fixed-suffix:                     Fixed-Point.        (line    6)
52524* 'HK' fixed-suffix:                     Fixed-Point.        (line    6)
52525* hosted environment:                    Standards.          (line   13)
52526* hosted environment <1>:                C Dialect Options.  (line  238)
52527* hosted environment <2>:                C Dialect Options.  (line  246)
52528* hosted implementation:                 Standards.          (line   13)
52529* 'hot' function attribute:              Function Attributes.
52530                                                             (line 1143)
52531* 'hot' label attribute:                 Function Attributes.
52532                                                             (line 1155)
52533* 'hotpatch' attribute:                  Function Attributes.
52534                                                             (line  911)
52535* HPPA Options:                          HPPA Options.       (line    6)
52536* 'hr' fixed-suffix:                     Fixed-Point.        (line    6)
52537* 'HR' fixed-suffix:                     Fixed-Point.        (line    6)
52538* hypot:                                 Other Builtins.     (line    6)
52539* hypotf:                                Other Builtins.     (line    6)
52540* hypotl:                                Other Builtins.     (line    6)
52541* 'i' in constraint:                     Simple Constraints. (line   68)
52542* 'I' in constraint:                     Simple Constraints. (line   79)
52543* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
52544                                                             (line    6)
52545* i386 Options:                          i386 and x86-64 Options.
52546                                                             (line    6)
52547* IA-64 Options:                         IA-64 Options.      (line    6)
52548* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
52549                                                             (line    6)
52550* identifier names, dollar signs in:     Dollar Signs.       (line    6)
52551* identifiers, names in assembler code:  Asm Labels.         (line    6)
52552* 'ifunc' attribute:                     Function Attributes.
52553                                                             (line  586)
52554* ilogb:                                 Other Builtins.     (line    6)
52555* ilogbf:                                Other Builtins.     (line    6)
52556* ilogbl:                                Other Builtins.     (line    6)
52557* imaxabs:                               Other Builtins.     (line    6)
52558* implementation-defined behavior, C language: C Implementation.
52559                                                             (line    6)
52560* implementation-defined behavior, C++ language: C++ Implementation.
52561                                                             (line    6)
52562* implied '#pragma implementation':      C++ Interface.      (line   46)
52563* incompatibilities of GCC:              Incompatibilities.  (line    6)
52564* increment operators:                   Bug Criteria.       (line   17)
52565* index:                                 Other Builtins.     (line    6)
52566* indirect calls on ARM:                 Function Attributes.
52567                                                             (line  792)
52568* indirect calls on MIPS:                Function Attributes.
52569                                                             (line  814)
52570* initializations in expressions:        Compound Literals.  (line    6)
52571* initializers with labeled elements:    Designated Inits.   (line    6)
52572* initializers, non-constant:            Initializers.       (line    6)
52573* 'init_priority' attribute:             C++ Attributes.     (line   30)
52574* 'inline' automatic for C++ member fns: Inline.             (line   71)
52575* inline functions:                      Inline.             (line    6)
52576* inline functions, omission of:         Inline.             (line   51)
52577* inlining and C++ pragmas:              C++ Interface.      (line   66)
52578* installation trouble:                  Trouble.            (line    6)
52579* integrating function code:             Inline.             (line    6)
52580* Intel 386 Options:                     i386 and x86-64 Options.
52581                                                             (line    6)
52582* interface and implementation headers, C++: C++ Interface.  (line    6)
52583* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
52584* interrupt handler functions:           Function Attributes.
52585                                                             (line  139)
52586* interrupt handler functions <1>:       Function Attributes.
52587                                                             (line  390)
52588* interrupt handler functions <2>:       Function Attributes.
52589                                                             (line  626)
52590* interrupt handler functions on the AVR processors: Function Attributes.
52591                                                             (line 1320)
52592* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
52593                                                             (line  730)
52594* interrupt service routines on ARM:     Function Attributes.
52595                                                             (line  744)
52596* interrupt thread functions on fido:    Function Attributes.
52597                                                             (line  736)
52598* introduction:                          Top.                (line    6)
52599* invalid assembly code:                 Bug Criteria.       (line   12)
52600* invalid input:                         Bug Criteria.       (line   42)
52601* invoking 'g++':                        Invoking G++.       (line   22)
52602* isalnum:                               Other Builtins.     (line    6)
52603* isalpha:                               Other Builtins.     (line    6)
52604* isascii:                               Other Builtins.     (line    6)
52605* isblank:                               Other Builtins.     (line    6)
52606* iscntrl:                               Other Builtins.     (line    6)
52607* isdigit:                               Other Builtins.     (line    6)
52608* isgraph:                               Other Builtins.     (line    6)
52609* islower:                               Other Builtins.     (line    6)
52610* ISO 9899:                              Standards.          (line   13)
52611* ISO C:                                 Standards.          (line   13)
52612* ISO C standard:                        Standards.          (line   13)
52613* ISO C11:                               Standards.          (line   13)
52614* ISO C1X:                               Standards.          (line   13)
52615* ISO C90:                               Standards.          (line   13)
52616* ISO C94:                               Standards.          (line   13)
52617* ISO C95:                               Standards.          (line   13)
52618* ISO C99:                               Standards.          (line   13)
52619* ISO C9X:                               Standards.          (line   13)
52620* ISO support:                           C Dialect Options.  (line   10)
52621* ISO/IEC 9899:                          Standards.          (line   13)
52622* isprint:                               Other Builtins.     (line    6)
52623* ispunct:                               Other Builtins.     (line    6)
52624* isspace:                               Other Builtins.     (line    6)
52625* isupper:                               Other Builtins.     (line    6)
52626* iswalnum:                              Other Builtins.     (line    6)
52627* iswalpha:                              Other Builtins.     (line    6)
52628* iswblank:                              Other Builtins.     (line    6)
52629* iswcntrl:                              Other Builtins.     (line    6)
52630* iswdigit:                              Other Builtins.     (line    6)
52631* iswgraph:                              Other Builtins.     (line    6)
52632* iswlower:                              Other Builtins.     (line    6)
52633* iswprint:                              Other Builtins.     (line    6)
52634* iswpunct:                              Other Builtins.     (line    6)
52635* iswspace:                              Other Builtins.     (line    6)
52636* iswupper:                              Other Builtins.     (line    6)
52637* iswxdigit:                             Other Builtins.     (line    6)
52638* isxdigit:                              Other Builtins.     (line    6)
52639* j0:                                    Other Builtins.     (line    6)
52640* j0f:                                   Other Builtins.     (line    6)
52641* j0l:                                   Other Builtins.     (line    6)
52642* j1:                                    Other Builtins.     (line    6)
52643* j1f:                                   Other Builtins.     (line    6)
52644* j1l:                                   Other Builtins.     (line    6)
52645* Java:                                  G++ and GCC.        (line    6)
52646* 'java_interface' attribute:            C++ Attributes.     (line   51)
52647* jn:                                    Other Builtins.     (line    6)
52648* jnf:                                   Other Builtins.     (line    6)
52649* jnl:                                   Other Builtins.     (line    6)
52650* 'k' fixed-suffix:                      Fixed-Point.        (line    6)
52651* 'K' fixed-suffix:                      Fixed-Point.        (line    6)
52652* 'keep_interrupts_masked' attribute:    Function Attributes.
52653                                                             (line  702)
52654* keywords, alternate:                   Alternate Keywords. (line    6)
52655* known causes of trouble:               Trouble.            (line    6)
52656* 'l1_data' variable attribute:          Variable Attributes.
52657                                                             (line  352)
52658* 'l1_data_A' variable attribute:        Variable Attributes.
52659                                                             (line  352)
52660* 'l1_data_B' variable attribute:        Variable Attributes.
52661                                                             (line  352)
52662* 'l1_text' function attribute:          Function Attributes.
52663                                                             (line  753)
52664* 'l2' function attribute:               Function Attributes.
52665                                                             (line  759)
52666* 'l2' variable attribute:               Variable Attributes.
52667                                                             (line  360)
52668* labeled elements in initializers:      Designated Inits.   (line    6)
52669* labels as values:                      Labels as Values.   (line    6)
52670* labs:                                  Other Builtins.     (line    6)
52671* LANG:                                  Environment Variables.
52672                                                             (line   21)
52673* LANG <1>:                              Environment Variables.
52674                                                             (line  106)
52675* language dialect options:              C Dialect Options.  (line    6)
52676* LC_ALL:                                Environment Variables.
52677                                                             (line   21)
52678* LC_CTYPE:                              Environment Variables.
52679                                                             (line   21)
52680* LC_MESSAGES:                           Environment Variables.
52681                                                             (line   21)
52682* ldexp:                                 Other Builtins.     (line    6)
52683* ldexpf:                                Other Builtins.     (line    6)
52684* ldexpl:                                Other Builtins.     (line    6)
52685* 'leaf' function attribute:             Function Attributes.
52686                                                             (line  765)
52687* length-zero arrays:                    Zero Length.        (line    6)
52688* lgamma:                                Other Builtins.     (line    6)
52689* lgammaf:                               Other Builtins.     (line    6)
52690* lgammaf_r:                             Other Builtins.     (line    6)
52691* lgammal:                               Other Builtins.     (line    6)
52692* lgammal_r:                             Other Builtins.     (line    6)
52693* lgamma_r:                              Other Builtins.     (line    6)
52694* Libraries:                             Link Options.       (line   24)
52695* LIBRARY_PATH:                          Environment Variables.
52696                                                             (line   97)
52697* link options:                          Link Options.       (line    6)
52698* linker script:                         Link Options.       (line  196)
52699* 'lk' fixed-suffix:                     Fixed-Point.        (line    6)
52700* 'LK' fixed-suffix:                     Fixed-Point.        (line    6)
52701* 'LL' integer suffix:                   Long Long.          (line    6)
52702* llabs:                                 Other Builtins.     (line    6)
52703* 'llk' fixed-suffix:                    Fixed-Point.        (line    6)
52704* 'LLK' fixed-suffix:                    Fixed-Point.        (line    6)
52705* 'llr' fixed-suffix:                    Fixed-Point.        (line    6)
52706* 'LLR' fixed-suffix:                    Fixed-Point.        (line    6)
52707* llrint:                                Other Builtins.     (line    6)
52708* llrintf:                               Other Builtins.     (line    6)
52709* llrintl:                               Other Builtins.     (line    6)
52710* llround:                               Other Builtins.     (line    6)
52711* llroundf:                              Other Builtins.     (line    6)
52712* llroundl:                              Other Builtins.     (line    6)
52713* LM32 options:                          LM32 Options.       (line    6)
52714* load address instruction:              Simple Constraints. (line  152)
52715* local labels:                          Local Labels.       (line    6)
52716* local variables in macros:             Typeof.             (line   46)
52717* local variables, specifying registers: Local Reg Vars.     (line    6)
52718* locale:                                Environment Variables.
52719                                                             (line   21)
52720* locale definition:                     Environment Variables.
52721                                                             (line  106)
52722* log:                                   Other Builtins.     (line    6)
52723* log10:                                 Other Builtins.     (line    6)
52724* log10f:                                Other Builtins.     (line    6)
52725* log10l:                                Other Builtins.     (line    6)
52726* log1p:                                 Other Builtins.     (line    6)
52727* log1pf:                                Other Builtins.     (line    6)
52728* log1pl:                                Other Builtins.     (line    6)
52729* log2:                                  Other Builtins.     (line    6)
52730* log2f:                                 Other Builtins.     (line    6)
52731* log2l:                                 Other Builtins.     (line    6)
52732* logb:                                  Other Builtins.     (line    6)
52733* logbf:                                 Other Builtins.     (line    6)
52734* logbl:                                 Other Builtins.     (line    6)
52735* logf:                                  Other Builtins.     (line    6)
52736* logl:                                  Other Builtins.     (line    6)
52737* 'long long' data types:                Long Long.          (line    6)
52738* longjmp:                               Global Reg Vars.    (line   65)
52739* 'longjmp' incompatibilities:           Incompatibilities.  (line   39)
52740* 'longjmp' warnings:                    Warning Options.    (line  667)
52741* 'lr' fixed-suffix:                     Fixed-Point.        (line    6)
52742* 'LR' fixed-suffix:                     Fixed-Point.        (line    6)
52743* lrint:                                 Other Builtins.     (line    6)
52744* lrintf:                                Other Builtins.     (line    6)
52745* lrintl:                                Other Builtins.     (line    6)
52746* lround:                                Other Builtins.     (line    6)
52747* lroundf:                               Other Builtins.     (line    6)
52748* lroundl:                               Other Builtins.     (line    6)
52749* 'm' in constraint:                     Simple Constraints. (line   17)
52750* M32C options:                          M32C Options.       (line    6)
52751* M32R/D options:                        M32R/D Options.     (line    6)
52752* M680x0 options:                        M680x0 Options.     (line    6)
52753* machine dependent options:             Submodel Options.   (line    6)
52754* machine specific constraints:          Machine Constraints.
52755                                                             (line    6)
52756* macro with variable arguments:         Variadic Macros.    (line    6)
52757* macros containing 'asm':               Extended Asm.       (line  237)
52758* macros, inline alternative:            Inline.             (line    6)
52759* macros, local labels:                  Local Labels.       (line    6)
52760* macros, local variables in:            Typeof.             (line   46)
52761* macros, statements in expressions:     Statement Exprs.    (line    6)
52762* macros, types of arguments:            Typeof.             (line    6)
52763* 'make':                                Preprocessor Options.
52764                                                             (line  185)
52765* malloc:                                Other Builtins.     (line    6)
52766* 'malloc' attribute:                    Function Attributes.
52767                                                             (line  824)
52768* matching constraint:                   Simple Constraints. (line  137)
52769* MCore options:                         MCore Options.      (line    6)
52770* member fns, automatically 'inline':    Inline.             (line   71)
52771* memchr:                                Other Builtins.     (line    6)
52772* memcmp:                                Other Builtins.     (line    6)
52773* memcpy:                                Other Builtins.     (line    6)
52774* memory references in constraints:      Simple Constraints. (line   17)
52775* mempcpy:                               Other Builtins.     (line    6)
52776* memset:                                Other Builtins.     (line    6)
52777* MeP options:                           MeP Options.        (line    6)
52778* Mercury:                               G++ and GCC.        (line   23)
52779* message formatting:                    Language Independent Options.
52780                                                             (line    6)
52781* messages, warning:                     Warning Options.    (line    6)
52782* messages, warning and error:           Warnings and Errors.
52783                                                             (line    6)
52784* MicroBlaze Options:                    MicroBlaze Options. (line    6)
52785* middle-operands, omitted:              Conditionals.       (line    6)
52786* MIPS options:                          MIPS Options.       (line    6)
52787* 'mips16' attribute:                    Function Attributes.
52788                                                             (line  833)
52789* misunderstandings in C++:              C++ Misunderstandings.
52790                                                             (line    6)
52791* mixed declarations and code:           Mixed Declarations. (line    6)
52792* 'mktemp', and constant strings:        Incompatibilities.  (line   13)
52793* MMIX Options:                          MMIX Options.       (line    6)
52794* MN10300 options:                       MN10300 Options.    (line    6)
52795* 'mode' attribute:                      Variable Attributes.
52796                                                             (line  133)
52797* modf:                                  Other Builtins.     (line    6)
52798* modff:                                 Other Builtins.     (line    6)
52799* modfl:                                 Other Builtins.     (line    6)
52800* modifiers in constraints:              Modifiers.          (line    6)
52801* Moxie Options:                         Moxie Options.      (line    6)
52802* 'ms_abi' attribute:                    Function Attributes.
52803                                                             (line  877)
52804* 'ms_hook_prologue' attribute:          Function Attributes.
52805                                                             (line  904)
52806* 'ms_struct':                           Type Attributes.    (line  323)
52807* 'ms_struct' attribute:                 Variable Attributes.
52808                                                             (line  438)
52809* mudflap:                               Optimize Options.   (line  404)
52810* multiple alternative constraints:      Multi-Alternative.  (line    6)
52811* multiprecision arithmetic:             Long Long.          (line    6)
52812* 'n' in constraint:                     Simple Constraints. (line   73)
52813* Named Address Spaces:                  Named Address Spaces.
52814                                                             (line    6)
52815* names used in assembler code:          Asm Labels.         (line    6)
52816* naming convention, implementation headers: C++ Interface.  (line   46)
52817* nearbyint:                             Other Builtins.     (line    6)
52818* nearbyintf:                            Other Builtins.     (line    6)
52819* nearbyintl:                            Other Builtins.     (line    6)
52820* nested functions:                      Nested Functions.   (line    6)
52821* newlines (escaped):                    Escaped Newlines.   (line    6)
52822* nextafter:                             Other Builtins.     (line    6)
52823* nextafterf:                            Other Builtins.     (line    6)
52824* nextafterl:                            Other Builtins.     (line    6)
52825* nexttoward:                            Other Builtins.     (line    6)
52826* nexttowardf:                           Other Builtins.     (line    6)
52827* nexttowardl:                           Other Builtins.     (line    6)
52828* NFC:                                   Warning Options.    (line 1272)
52829* NFKC:                                  Warning Options.    (line 1272)
52830* NMI handler functions on the Blackfin processor: Function Attributes.
52831                                                             (line  947)
52832* 'noclone' function attribute:          Function Attributes.
52833                                                             (line  975)
52834* 'nocommon' attribute:                  Variable Attributes.
52835                                                             (line  104)
52836* 'noinline' function attribute:         Function Attributes.
52837                                                             (line  964)
52838* 'nomips16' attribute:                  Function Attributes.
52839                                                             (line  833)
52840* non-constant initializers:             Initializers.       (line    6)
52841* non-static inline function:            Inline.             (line   85)
52842* 'nonnull' function attribute:          Function Attributes.
52843                                                             (line  981)
52844* 'noreturn' function attribute:         Function Attributes.
52845                                                             (line 1005)
52846* 'nosave_low_regs' attribute:           Function Attributes.
52847                                                             (line 1055)
52848* 'nothrow' function attribute:          Function Attributes.
52849                                                             (line 1047)
52850* 'no_instrument_function' function attribute: Function Attributes.
52851                                                             (line  953)
52852* 'no_sanitize_address' function attribute: Function Attributes.
52853                                                             (line 1193)
52854* 'no_split_stack' function attribute:   Function Attributes.
52855                                                             (line  958)
52856* 'o' in constraint:                     Simple Constraints. (line   23)
52857* OBJC_INCLUDE_PATH:                     Environment Variables.
52858                                                             (line  130)
52859* Objective-C:                           G++ and GCC.        (line    6)
52860* Objective-C <1>:                       Standards.          (line  163)
52861* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
52862                                                             (line    6)
52863* Objective-C++:                         G++ and GCC.        (line    6)
52864* Objective-C++ <1>:                     Standards.          (line  163)
52865* offsettable address:                   Simple Constraints. (line   23)
52866* old-style function definitions:        Function Prototypes.
52867                                                             (line    6)
52868* omitted middle-operands:               Conditionals.       (line    6)
52869* open coding:                           Inline.             (line    6)
52870* OpenMP parallel:                       C Dialect Options.  (line  257)
52871* operand constraints, 'asm':            Constraints.        (line    6)
52872* 'optimize' function attribute:         Function Attributes.
52873                                                             (line 1061)
52874* optimize options:                      Optimize Options.   (line    6)
52875* options to control diagnostics formatting: Language Independent Options.
52876                                                             (line    6)
52877* options to control warnings:           Warning Options.    (line    6)
52878* options, C++:                          C++ Dialect Options.
52879                                                             (line    6)
52880* options, code generation:              Code Gen Options.   (line    6)
52881* options, debugging:                    Debugging Options.  (line    6)
52882* options, dialect:                      C Dialect Options.  (line    6)
52883* options, directory search:             Directory Options.  (line    6)
52884* options, GCC command:                  Invoking GCC.       (line    6)
52885* options, grouping:                     Invoking GCC.       (line   26)
52886* options, linking:                      Link Options.       (line    6)
52887* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52888                                                             (line    6)
52889* options, optimization:                 Optimize Options.   (line    6)
52890* options, order:                        Invoking GCC.       (line   30)
52891* options, preprocessor:                 Preprocessor Options.
52892                                                             (line    6)
52893* order of evaluation, side effects:     Non-bugs.           (line  196)
52894* order of options:                      Invoking GCC.       (line   30)
52895* 'OS_main' AVR function attribute:      Function Attributes.
52896                                                             (line 1078)
52897* 'OS_task' AVR function attribute:      Function Attributes.
52898                                                             (line 1078)
52899* other register constraints:            Simple Constraints. (line  161)
52900* output file option:                    Overall Options.    (line  191)
52901* overloaded virtual function, warning:  C++ Dialect Options.
52902                                                             (line  609)
52903* 'p' in constraint:                     Simple Constraints. (line  152)
52904* 'packed' attribute:                    Variable Attributes.
52905                                                             (line  144)
52906* parameter forward declaration:         Variable Length.    (line   59)
52907* Pascal:                                G++ and GCC.        (line   23)
52908* 'pcs' function attribute:              Function Attributes.
52909                                                             (line 1102)
52910* PDP-11 Options:                        PDP-11 Options.     (line    6)
52911* PIC:                                   Code Gen Options.   (line  266)
52912* picoChip options:                      picoChip Options.   (line    6)
52913* pmf:                                   Bound member functions.
52914                                                             (line    6)
52915* pointer arguments:                     Function Attributes.
52916                                                             (line  186)
52917* pointer to member function:            Bound member functions.
52918                                                             (line    6)
52919* portions of temporary objects, pointers to: Temporaries.   (line    6)
52920* pow:                                   Other Builtins.     (line    6)
52921* pow10:                                 Other Builtins.     (line    6)
52922* pow10f:                                Other Builtins.     (line    6)
52923* pow10l:                                Other Builtins.     (line    6)
52924* PowerPC options:                       PowerPC Options.    (line    6)
52925* powf:                                  Other Builtins.     (line    6)
52926* powl:                                  Other Builtins.     (line    6)
52927* pragma GCC optimize:                   Function Specific Option Pragmas.
52928                                                             (line   22)
52929* pragma GCC pop_options:                Function Specific Option Pragmas.
52930                                                             (line   36)
52931* pragma GCC push_options:               Function Specific Option Pragmas.
52932                                                             (line   36)
52933* pragma GCC reset_options:              Function Specific Option Pragmas.
52934                                                             (line   47)
52935* pragma GCC target:                     Function Specific Option Pragmas.
52936                                                             (line    7)
52937* pragma, address:                       M32C Pragmas.       (line   15)
52938* pragma, align:                         Solaris Pragmas.    (line   11)
52939* pragma, call:                          MeP Pragmas.        (line   48)
52940* pragma, coprocessor available:         MeP Pragmas.        (line   13)
52941* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
52942* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
52943* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
52944* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
52945* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
52946* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
52947* pragma, fini:                          Solaris Pragmas.    (line   20)
52948* pragma, init:                          Solaris Pragmas.    (line   26)
52949* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
52950                                                             (line   14)
52951* pragma, long_calls:                    ARM Pragmas.        (line   11)
52952* pragma, long_calls_off:                ARM Pragmas.        (line   17)
52953* pragma, mark:                          Darwin Pragmas.     (line   11)
52954* pragma, memregs:                       M32C Pragmas.       (line    7)
52955* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
52956* pragma, options align:                 Darwin Pragmas.     (line   14)
52957* pragma, pop_macro:                     Push/Pop Macro Pragmas.
52958                                                             (line   15)
52959* pragma, push_macro:                    Push/Pop Macro Pragmas.
52960                                                             (line   11)
52961* pragma, reason for not using:          Function Attributes.
52962                                                             (line 1875)
52963* pragma, redefine_extname:              Symbol-Renaming Pragmas.
52964                                                             (line   12)
52965* pragma, segment:                       Darwin Pragmas.     (line   21)
52966* pragma, unused:                        Darwin Pragmas.     (line   24)
52967* pragma, visibility:                    Visibility Pragmas. (line    8)
52968* pragma, weak:                          Weak Pragmas.       (line   10)
52969* pragmas:                               Pragmas.            (line    6)
52970* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
52971* pragmas, interface and implementation: C++ Interface.      (line    6)
52972* pragmas, warning of unknown:           Warning Options.    (line  684)
52973* precompiled headers:                   Precompiled Headers.
52974                                                             (line    6)
52975* preprocessing numbers:                 Incompatibilities.  (line  173)
52976* preprocessing tokens:                  Incompatibilities.  (line  173)
52977* preprocessor options:                  Preprocessor Options.
52978                                                             (line    6)
52979* printf:                                Other Builtins.     (line    6)
52980* printf_unlocked:                       Other Builtins.     (line    6)
52981* 'prof':                                Debugging Options.  (line  327)
52982* 'progmem' AVR variable attribute:      Variable Attributes.
52983                                                             (line  314)
52984* promotion of formal parameters:        Function Prototypes.
52985                                                             (line    6)
52986* 'pure' function attribute:             Function Attributes.
52987                                                             (line 1121)
52988* push address instruction:              Simple Constraints. (line  152)
52989* putchar:                               Other Builtins.     (line    6)
52990* puts:                                  Other Builtins.     (line    6)
52991* 'q' floating point suffix:             Floating Types.     (line    6)
52992* 'Q' floating point suffix:             Floating Types.     (line    6)
52993* 'qsort', and global register variables: Global Reg Vars.   (line   41)
52994* question mark:                         Multi-Alternative.  (line   27)
52995* 'r' fixed-suffix:                      Fixed-Point.        (line    6)
52996* 'R' fixed-suffix:                      Fixed-Point.        (line    6)
52997* 'r' in constraint:                     Simple Constraints. (line   64)
52998* 'RAMPD':                               AVR Options.        (line  333)
52999* 'RAMPX':                               AVR Options.        (line  333)
53000* 'RAMPY':                               AVR Options.        (line  333)
53001* 'RAMPZ':                               AVR Options.        (line  333)
53002* ranges in case statements:             Case Ranges.        (line    6)
53003* read-only strings:                     Incompatibilities.  (line    9)
53004* register variable after 'longjmp':     Global Reg Vars.    (line   65)
53005* registers:                             Extended Asm.       (line    6)
53006* registers for local variables:         Local Reg Vars.     (line    6)
53007* registers in constraints:              Simple Constraints. (line   64)
53008* registers, global allocation:          Explicit Reg Vars.  (line    6)
53009* registers, global variables in:        Global Reg Vars.    (line    6)
53010* 'regparm' attribute:                   Function Attributes.
53011                                                             (line 1201)
53012* relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
53013* relocation truncated to fit (MIPS):    MIPS Options.       (line  199)
53014* remainder:                             Other Builtins.     (line    6)
53015* remainderf:                            Other Builtins.     (line    6)
53016* remainderl:                            Other Builtins.     (line    6)
53017* remquo:                                Other Builtins.     (line    6)
53018* remquof:                               Other Builtins.     (line    6)
53019* remquol:                               Other Builtins.     (line    6)
53020* 'renesas' attribute:                   Function Attributes.
53021                                                             (line 1233)
53022* reordering, warning:                   C++ Dialect Options.
53023                                                             (line  527)
53024* reporting bugs:                        Bugs.               (line    6)
53025* 'resbank' attribute:                   Function Attributes.
53026                                                             (line 1237)
53027* rest argument (in macro):              Variadic Macros.    (line    6)
53028* restricted pointers:                   Restricted Pointers.
53029                                                             (line    6)
53030* restricted references:                 Restricted Pointers.
53031                                                             (line    6)
53032* restricted this pointer:               Restricted Pointers.
53033                                                             (line    6)
53034* 'returns_twice' attribute:             Function Attributes.
53035                                                             (line 1251)
53036* rindex:                                Other Builtins.     (line    6)
53037* rint:                                  Other Builtins.     (line    6)
53038* rintf:                                 Other Builtins.     (line    6)
53039* rintl:                                 Other Builtins.     (line    6)
53040* RL78 Options:                          RL78 Options.       (line    6)
53041* round:                                 Other Builtins.     (line    6)
53042* roundf:                                Other Builtins.     (line    6)
53043* roundl:                                Other Builtins.     (line    6)
53044* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
53045                                                             (line    6)
53046* RTTI:                                  Vague Linkage.      (line   42)
53047* run-time options:                      Code Gen Options.   (line    6)
53048* RX Options:                            RX Options.         (line    6)
53049* 's' in constraint:                     Simple Constraints. (line  100)
53050* S/390 and zSeries Options:             S/390 and zSeries Options.
53051                                                             (line    6)
53052* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
53053                                                             (line 1260)
53054* save volatile registers on the MicroBlaze: Function Attributes.
53055                                                             (line 1265)
53056* scalb:                                 Other Builtins.     (line    6)
53057* scalbf:                                Other Builtins.     (line    6)
53058* scalbl:                                Other Builtins.     (line    6)
53059* scalbln:                               Other Builtins.     (line    6)
53060* scalblnf:                              Other Builtins.     (line    6)
53061* scalblnf <1>:                          Other Builtins.     (line    6)
53062* scalbn:                                Other Builtins.     (line    6)
53063* scalbnf:                               Other Builtins.     (line    6)
53064* 'scanf', and constant strings:         Incompatibilities.  (line   17)
53065* scanfnl:                               Other Builtins.     (line    6)
53066* scope of a variable length array:      Variable Length.    (line   22)
53067* scope of declaration:                  Disappointments.    (line   21)
53068* scope of external declarations:        Incompatibilities.  (line   80)
53069* Score Options:                         Score Options.      (line    6)
53070* search path:                           Directory Options.  (line    6)
53071* 'section' function attribute:          Function Attributes.
53072                                                             (line 1273)
53073* 'section' variable attribute:          Variable Attributes.
53074                                                             (line  165)
53075* 'sentinel' function attribute:         Function Attributes.
53076                                                             (line 1289)
53077* setjmp:                                Global Reg Vars.    (line   65)
53078* 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
53079* shared strings:                        Incompatibilities.  (line    9)
53080* 'shared' variable attribute:           Variable Attributes.
53081                                                             (line  210)
53082* side effect in '?:':                   Conditionals.       (line   20)
53083* side effects, macro argument:          Statement Exprs.    (line   35)
53084* side effects, order of evaluation:     Non-bugs.           (line  196)
53085* signbit:                               Other Builtins.     (line    6)
53086* signbitd128:                           Other Builtins.     (line    6)
53087* signbitd32:                            Other Builtins.     (line    6)
53088* signbitd64:                            Other Builtins.     (line    6)
53089* signbitf:                              Other Builtins.     (line    6)
53090* signbitl:                              Other Builtins.     (line    6)
53091* signed and unsigned values, comparison warning: Warning Options.
53092                                                             (line 1144)
53093* significand:                           Other Builtins.     (line    6)
53094* significandf:                          Other Builtins.     (line    6)
53095* significandl:                          Other Builtins.     (line    6)
53096* simple constraints:                    Simple Constraints. (line    6)
53097* sin:                                   Other Builtins.     (line    6)
53098* sincos:                                Other Builtins.     (line    6)
53099* sincosf:                               Other Builtins.     (line    6)
53100* sincosl:                               Other Builtins.     (line    6)
53101* sinf:                                  Other Builtins.     (line    6)
53102* sinh:                                  Other Builtins.     (line    6)
53103* sinhf:                                 Other Builtins.     (line    6)
53104* sinhl:                                 Other Builtins.     (line    6)
53105* sinl:                                  Other Builtins.     (line    6)
53106* sizeof:                                Typeof.             (line    6)
53107* smaller data references:               M32R/D Options.     (line   57)
53108* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
53109                                                             (line  739)
53110* snprintf:                              Other Builtins.     (line    6)
53111* Solaris 2 options:                     Solaris 2 Options.  (line    6)
53112* SPARC options:                         SPARC Options.      (line    6)
53113* Spec Files:                            Spec Files.         (line    6)
53114* specified registers:                   Explicit Reg Vars.  (line    6)
53115* specifying compiler version and target machine: Target Options.
53116                                                             (line    6)
53117* specifying hardware config:            Submodel Options.   (line    6)
53118* specifying machine version:            Target Options.     (line    6)
53119* specifying registers for local variables: Local Reg Vars.  (line    6)
53120* speed of compilation:                  Precompiled Headers.
53121                                                             (line    6)
53122* sprintf:                               Other Builtins.     (line    6)
53123* SPU options:                           SPU Options.        (line    6)
53124* 'sp_switch' attribute:                 Function Attributes.
53125                                                             (line 1338)
53126* sqrt:                                  Other Builtins.     (line    6)
53127* sqrtf:                                 Other Builtins.     (line    6)
53128* sqrtl:                                 Other Builtins.     (line    6)
53129* sscanf:                                Other Builtins.     (line    6)
53130* 'sscanf', and constant strings:        Incompatibilities.  (line   17)
53131* 'sseregparm' attribute:                Function Attributes.
53132                                                             (line 1218)
53133* statements inside expressions:         Statement Exprs.    (line    6)
53134* static data in C++, declaring and defining: Static Definitions.
53135                                                             (line    6)
53136* stpcpy:                                Other Builtins.     (line    6)
53137* stpncpy:                               Other Builtins.     (line    6)
53138* strcasecmp:                            Other Builtins.     (line    6)
53139* strcat:                                Other Builtins.     (line    6)
53140* strchr:                                Other Builtins.     (line    6)
53141* strcmp:                                Other Builtins.     (line    6)
53142* strcpy:                                Other Builtins.     (line    6)
53143* strcspn:                               Other Builtins.     (line    6)
53144* strdup:                                Other Builtins.     (line    6)
53145* strfmon:                               Other Builtins.     (line    6)
53146* strftime:                              Other Builtins.     (line    6)
53147* string constants:                      Incompatibilities.  (line    9)
53148* strlen:                                Other Builtins.     (line    6)
53149* strncasecmp:                           Other Builtins.     (line    6)
53150* strncat:                               Other Builtins.     (line    6)
53151* strncmp:                               Other Builtins.     (line    6)
53152* strncpy:                               Other Builtins.     (line    6)
53153* strndup:                               Other Builtins.     (line    6)
53154* strpbrk:                               Other Builtins.     (line    6)
53155* strrchr:                               Other Builtins.     (line    6)
53156* strspn:                                Other Builtins.     (line    6)
53157* strstr:                                Other Builtins.     (line    6)
53158* 'struct':                              Unnamed Fields.     (line    6)
53159* struct __htm_tdb:                      S/390 System z Built-in Functions.
53160                                                             (line   49)
53161* structures:                            Incompatibilities.  (line  146)
53162* structures, constructor expression:    Compound Literals.  (line    6)
53163* submodel options:                      Submodel Options.   (line    6)
53164* subscripting:                          Subscripting.       (line    6)
53165* subscripting and function values:      Subscripting.       (line    6)
53166* suffixes for C++ source:               Invoking G++.       (line    6)
53167* SUNPRO_DEPENDENCIES:                   Environment Variables.
53168                                                             (line  170)
53169* suppressing warnings:                  Warning Options.    (line    6)
53170* surprises in C++:                      C++ Misunderstandings.
53171                                                             (line    6)
53172* syntax checking:                       Warning Options.    (line   13)
53173* 'syscall_linkage' attribute:           Function Attributes.
53174                                                             (line 1353)
53175* system headers, warnings from:         Warning Options.    (line  835)
53176* 'sysv_abi' attribute:                  Function Attributes.
53177                                                             (line  877)
53178* tan:                                   Other Builtins.     (line    6)
53179* tanf:                                  Other Builtins.     (line    6)
53180* tanh:                                  Other Builtins.     (line    6)
53181* tanhf:                                 Other Builtins.     (line    6)
53182* tanhl:                                 Other Builtins.     (line    6)
53183* tanl:                                  Other Builtins.     (line    6)
53184* 'target' function attribute:           Function Attributes.
53185                                                             (line 1360)
53186* target machine, specifying:            Target Options.     (line    6)
53187* target options:                        Target Options.     (line    6)
53188* 'target("abm")' attribute:             Function Attributes.
53189                                                             (line 1386)
53190* 'target("aes")' attribute:             Function Attributes.
53191                                                             (line 1391)
53192* 'target("align-stringops")' attribute: Function Attributes.
53193                                                             (line 1485)
53194* 'target("altivec")' attribute:         Function Attributes.
53195                                                             (line 1511)
53196* 'target("arch=ARCH")' attribute:       Function Attributes.
53197                                                             (line 1494)
53198* 'target("avoid-indexed-addresses")' attribute: Function Attributes.
53199                                                             (line 1632)
53200* 'target("cld")' attribute:             Function Attributes.
53201                                                             (line 1456)
53202* 'target("cmpb")' attribute:            Function Attributes.
53203                                                             (line 1517)
53204* 'target("cpu=CPU")' attribute:         Function Attributes.
53205                                                             (line 1647)
53206* 'target("default")' attribute:         Function Attributes.
53207                                                             (line 1394)
53208* 'target("dlmzb")' attribute:           Function Attributes.
53209                                                             (line 1523)
53210* 'target("fancy-math-387")' attribute:  Function Attributes.
53211                                                             (line 1460)
53212* 'target("fma4")' attribute:            Function Attributes.
53213                                                             (line 1440)
53214* 'target("fpmath=FPMATH")' attribute:   Function Attributes.
53215                                                             (line 1502)
53216* 'target("fprnd")' attribute:           Function Attributes.
53217                                                             (line 1530)
53218* 'target("friz")' attribute:            Function Attributes.
53219                                                             (line 1623)
53220* 'target("fused-madd")' attribute:      Function Attributes.
53221                                                             (line 1465)
53222* 'target("hard-dfp")' attribute:        Function Attributes.
53223                                                             (line 1536)
53224* 'target("ieee-fp")' attribute:         Function Attributes.
53225                                                             (line 1470)
53226* 'target("inline-all-stringops")' attribute: Function Attributes.
53227                                                             (line 1475)
53228* 'target("inline-stringops-dynamically")' attribute: Function Attributes.
53229                                                             (line 1479)
53230* 'target("isel")' attribute:            Function Attributes.
53231                                                             (line 1542)
53232* 'target("longcall")' attribute:        Function Attributes.
53233                                                             (line 1642)
53234* 'target("lwp")' attribute:             Function Attributes.
53235                                                             (line 1448)
53236* 'target("mfcrf")' attribute:           Function Attributes.
53237                                                             (line 1546)
53238* 'target("mfpgpr")' attribute:          Function Attributes.
53239                                                             (line 1553)
53240* 'target("mmx")' attribute:             Function Attributes.
53241                                                             (line 1399)
53242* 'target("mulhw")' attribute:           Function Attributes.
53243                                                             (line 1560)
53244* 'target("multiple")' attribute:        Function Attributes.
53245                                                             (line 1567)
53246* 'target("paired")' attribute:          Function Attributes.
53247                                                             (line 1637)
53248* 'target("pclmul")' attribute:          Function Attributes.
53249                                                             (line 1403)
53250* 'target("popcnt")' attribute:          Function Attributes.
53251                                                             (line 1407)
53252* 'target("popcntb")' attribute:         Function Attributes.
53253                                                             (line 1578)
53254* 'target("popcntd")' attribute:         Function Attributes.
53255                                                             (line 1585)
53256* 'target("powerpc-gfxopt")' attribute:  Function Attributes.
53257                                                             (line 1591)
53258* 'target("powerpc-gpopt")' attribute:   Function Attributes.
53259                                                             (line 1597)
53260* 'target("recip")' attribute:           Function Attributes.
53261                                                             (line 1489)
53262* 'target("recip-precision")' attribute: Function Attributes.
53263                                                             (line 1603)
53264* 'target("sse")' attribute:             Function Attributes.
53265                                                             (line 1411)
53266* 'target("sse2")' attribute:            Function Attributes.
53267                                                             (line 1415)
53268* 'target("sse3")' attribute:            Function Attributes.
53269                                                             (line 1419)
53270* 'target("sse4")' attribute:            Function Attributes.
53271                                                             (line 1423)
53272* 'target("sse4.1")' attribute:          Function Attributes.
53273                                                             (line 1428)
53274* 'target("sse4.2")' attribute:          Function Attributes.
53275                                                             (line 1432)
53276* 'target("sse4a")' attribute:           Function Attributes.
53277                                                             (line 1436)
53278* 'target("ssse3")' attribute:           Function Attributes.
53279                                                             (line 1452)
53280* 'target("string")' attribute:          Function Attributes.
53281                                                             (line 1609)
53282* 'target("tune=TUNE")' attribute:       Function Attributes.
53283                                                             (line 1498)
53284* 'target("tune=TUNE")' attribute <1>:   Function Attributes.
53285                                                             (line 1654)
53286* 'target("update")' attribute:          Function Attributes.
53287                                                             (line 1572)
53288* 'target("vsx")' attribute:             Function Attributes.
53289                                                             (line 1615)
53290* 'target("xop")' attribute:             Function Attributes.
53291                                                             (line 1444)
53292* TC1:                                   Standards.          (line   13)
53293* TC2:                                   Standards.          (line   13)
53294* TC3:                                   Standards.          (line   13)
53295* Technical Corrigenda:                  Standards.          (line   13)
53296* Technical Corrigendum 1:               Standards.          (line   13)
53297* Technical Corrigendum 2:               Standards.          (line   13)
53298* Technical Corrigendum 3:               Standards.          (line   13)
53299* template instantiation:                Template Instantiation.
53300                                                             (line    6)
53301* temporaries, lifetime of:              Temporaries.        (line    6)
53302* tgamma:                                Other Builtins.     (line    6)
53303* tgammaf:                               Other Builtins.     (line    6)
53304* tgammal:                               Other Builtins.     (line    6)
53305* Thread-Local Storage:                  Thread-Local.       (line    6)
53306* thunks:                                Nested Functions.   (line    6)
53307* TILE-Gx options:                       TILE-Gx Options.    (line    6)
53308* TILEPro options:                       TILEPro Options.    (line    6)
53309* tiny data section on the H8/300H and H8S: Function Attributes.
53310                                                             (line 1676)
53311* TLS:                                   Thread-Local.       (line    6)
53312* 'tls_model' attribute:                 Variable Attributes.
53313                                                             (line  233)
53314* TMPDIR:                                Environment Variables.
53315                                                             (line   45)
53316* toascii:                               Other Builtins.     (line    6)
53317* tolower:                               Other Builtins.     (line    6)
53318* toupper:                               Other Builtins.     (line    6)
53319* towlower:                              Other Builtins.     (line    6)
53320* towupper:                              Other Builtins.     (line    6)
53321* traditional C language:                C Dialect Options.  (line  309)
53322* 'trapa_handler' attribute:             Function Attributes.
53323                                                             (line 1688)
53324* 'trap_exit' attribute:                 Function Attributes.
53325                                                             (line 1683)
53326* trunc:                                 Other Builtins.     (line    6)
53327* truncf:                                Other Builtins.     (line    6)
53328* truncl:                                Other Builtins.     (line    6)
53329* two-stage name lookup:                 Name lookup.        (line    6)
53330* type alignment:                        Alignment.          (line    6)
53331* type attributes:                       Type Attributes.    (line    6)
53332* typedef names as function parameters:  Incompatibilities.  (line   97)
53333* typeof:                                Typeof.             (line    6)
53334* 'type_info':                           Vague Linkage.      (line   42)
53335* 'uhk' fixed-suffix:                    Fixed-Point.        (line    6)
53336* 'UHK' fixed-suffix:                    Fixed-Point.        (line    6)
53337* 'uhr' fixed-suffix:                    Fixed-Point.        (line    6)
53338* 'UHR' fixed-suffix:                    Fixed-Point.        (line    6)
53339* 'uk' fixed-suffix:                     Fixed-Point.        (line    6)
53340* 'UK' fixed-suffix:                     Fixed-Point.        (line    6)
53341* 'ulk' fixed-suffix:                    Fixed-Point.        (line    6)
53342* 'ULK' fixed-suffix:                    Fixed-Point.        (line    6)
53343* 'ULL' integer suffix:                  Long Long.          (line    6)
53344* 'ullk' fixed-suffix:                   Fixed-Point.        (line    6)
53345* 'ULLK' fixed-suffix:                   Fixed-Point.        (line    6)
53346* 'ullr' fixed-suffix:                   Fixed-Point.        (line    6)
53347* 'ULLR' fixed-suffix:                   Fixed-Point.        (line    6)
53348* 'ulr' fixed-suffix:                    Fixed-Point.        (line    6)
53349* 'ULR' fixed-suffix:                    Fixed-Point.        (line    6)
53350* undefined behavior:                    Bug Criteria.       (line   17)
53351* undefined function value:              Bug Criteria.       (line   17)
53352* underscores in variables in macros:    Typeof.             (line   46)
53353* 'union':                               Unnamed Fields.     (line    6)
53354* union, casting to a:                   Cast to Union.      (line    6)
53355* unions:                                Incompatibilities.  (line  146)
53356* unknown pragmas, warning:              Warning Options.    (line  684)
53357* unresolved references and '-nodefaultlibs': Link Options.  (line   85)
53358* unresolved references and '-nostdlib': Link Options.       (line   85)
53359* 'unused' attribute.:                   Function Attributes.
53360                                                             (line 1692)
53361* 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
53362* 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
53363* 'used' attribute.:                     Function Attributes.
53364                                                             (line 1697)
53365* User stack pointer in interrupts on the Blackfin: Function Attributes.
53366                                                             (line  748)
53367* 'use_debug_exception_return' attribute: Function Attributes.
53368                                                             (line  707)
53369* 'use_shadow_register_set' attribute:   Function Attributes.
53370                                                             (line  698)
53371* 'V' in constraint:                     Simple Constraints. (line   43)
53372* V850 Options:                          V850 Options.       (line    6)
53373* vague linkage:                         Vague Linkage.      (line    6)
53374* value after 'longjmp':                 Global Reg Vars.    (line   65)
53375* variable addressability on the IA-64:  Function Attributes.
53376                                                             (line  848)
53377* variable addressability on the M32R/D: Variable Attributes.
53378                                                             (line  370)
53379* variable alignment:                    Alignment.          (line    6)
53380* variable attributes:                   Variable Attributes.
53381                                                             (line    6)
53382* variable number of arguments:          Variadic Macros.    (line    6)
53383* variable-length array scope:           Variable Length.    (line   22)
53384* variable-length arrays:                Variable Length.    (line    6)
53385* variables in specified registers:      Explicit Reg Vars.  (line    6)
53386* variables, local, in macros:           Typeof.             (line   46)
53387* variadic macros:                       Variadic Macros.    (line    6)
53388* VAX options:                           VAX Options.        (line    6)
53389* 'version_id' attribute:                Function Attributes.
53390                                                             (line 1707)
53391* vfprintf:                              Other Builtins.     (line    6)
53392* vfscanf:                               Other Builtins.     (line    6)
53393* 'visibility' attribute:                Function Attributes.
53394                                                             (line 1717)
53395* VLAs:                                  Variable Length.    (line    6)
53396* 'vliw' attribute:                      Function Attributes.
53397                                                             (line 1809)
53398* void pointers, arithmetic:             Pointer Arith.      (line    6)
53399* void, size of pointer to:              Pointer Arith.      (line    6)
53400* volatile access:                       Volatiles.          (line    6)
53401* volatile access <1>:                   C++ Volatiles.      (line    6)
53402* 'volatile' applied to function:        Function Attributes.
53403                                                             (line    6)
53404* volatile read:                         Volatiles.          (line    6)
53405* volatile read <1>:                     C++ Volatiles.      (line    6)
53406* volatile write:                        Volatiles.          (line    6)
53407* volatile write <1>:                    C++ Volatiles.      (line    6)
53408* vprintf:                               Other Builtins.     (line    6)
53409* vscanf:                                Other Builtins.     (line    6)
53410* vsnprintf:                             Other Builtins.     (line    6)
53411* vsprintf:                              Other Builtins.     (line    6)
53412* vsscanf:                               Other Builtins.     (line    6)
53413* vtable:                                Vague Linkage.      (line   27)
53414* VxWorks Options:                       VxWorks Options.    (line    6)
53415* 'w' floating point suffix:             Floating Types.     (line    6)
53416* 'W' floating point suffix:             Floating Types.     (line    6)
53417* warning for comparison of signed and unsigned values: Warning Options.
53418                                                             (line 1144)
53419* warning for overloaded virtual function: C++ Dialect Options.
53420                                                             (line  609)
53421* warning for reordering of member initializers: C++ Dialect Options.
53422                                                             (line  527)
53423* warning for unknown pragmas:           Warning Options.    (line  684)
53424* 'warning' function attribute:          Function Attributes.
53425                                                             (line  164)
53426* warning messages:                      Warning Options.    (line    6)
53427* warnings from system headers:          Warning Options.    (line  835)
53428* warnings vs errors:                    Warnings and Errors.
53429                                                             (line    6)
53430* 'warn_unused_result' attribute:        Function Attributes.
53431                                                             (line 1815)
53432* 'weak' attribute:                      Function Attributes.
53433                                                             (line 1832)
53434* 'weakref' attribute:                   Function Attributes.
53435                                                             (line 1841)
53436* whitespace:                            Incompatibilities.  (line  112)
53437* 'X' in constraint:                     Simple Constraints. (line  122)
53438* X3.159-1989:                           Standards.          (line   13)
53439* x86-64 Options:                        i386 and x86-64 Options.
53440                                                             (line    6)
53441* x86-64 options:                        x86-64 Options.     (line    6)
53442* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
53443* Xtensa Options:                        Xtensa Options.     (line    6)
53444* y0:                                    Other Builtins.     (line    6)
53445* y0f:                                   Other Builtins.     (line    6)
53446* y0l:                                   Other Builtins.     (line    6)
53447* y1:                                    Other Builtins.     (line    6)
53448* y1f:                                   Other Builtins.     (line    6)
53449* y1l:                                   Other Builtins.     (line    6)
53450* yn:                                    Other Builtins.     (line    6)
53451* ynf:                                   Other Builtins.     (line    6)
53452* ynl:                                   Other Builtins.     (line    6)
53453* zero-length arrays:                    Zero Length.        (line    6)
53454* zero-size structures:                  Empty Structures.   (line    6)
53455* zSeries options:                       zSeries Options.    (line    6)
53456
53457
53458
53459Tag Table:
53460Node: Top1881
53461Node: G++ and GCC3646
53462Node: Standards5703
53463Node: Invoking GCC17883
53464Node: Option Summary21628
53465Node: Overall Options61756
53466Node: Invoking G++75943
53467Node: C Dialect Options77466
53468Node: C++ Dialect Options93301
53469Node: Objective-C and Objective-C++ Dialect Options121369
53470Node: Language Independent Options131876
53471Node: Warning Options134073
53472Node: Debugging Options203219
53473Node: Optimize Options260718
53474Ref: Type-punning319376
53475Node: Preprocessor Options397709
53476Ref: Wtrigraphs402492
53477Ref: dashMF407242
53478Ref: fdollars-in-identifiers418123
53479Node: Assembler Options428348
53480Node: Link Options429039
53481Ref: Link Options-Footnote-1440271
53482Node: Directory Options440607
53483Node: Spec Files447152
53484Node: Target Options468496
53485Node: Submodel Options468895
53486Node: AArch64 Options470588
53487Node: Adapteva Epiphany Options474460
53488Node: ARM Options480408
53489Node: AVR Options496259
53490Node: Blackfin Options516393
53491Node: C6X Options524411
53492Node: CRIS Options525954
53493Node: CR16 Options529693
53494Node: Darwin Options530604
53495Node: DEC Alpha Options538036
53496Node: FR30 Options549652
53497Node: FRV Options550216
53498Node: GNU/Linux Options556980
53499Node: H8/300 Options558240
53500Node: HPPA Options559692
53501Node: i386 and x86-64 Options569177
53502Node: i386 and x86-64 Windows Options606283
53503Node: IA-64 Options609136
53504Node: LM32 Options617202
53505Node: M32C Options617725
53506Node: M32R/D Options618998
53507Node: M680x0 Options622543
53508Node: MCore Options636578
53509Node: MeP Options638080
53510Node: MicroBlaze Options642039
53511Node: MIPS Options644841
53512Node: MMIX Options673693
53513Node: MN10300 Options676170
53514Node: Moxie Options678711
53515Node: PDP-11 Options679081
53516Node: picoChip Options680773
53517Node: PowerPC Options682911
53518Node: RL78 Options683132
53519Node: RS/6000 and PowerPC Options683793
53520Node: RX Options722790
53521Node: S/390 and zSeries Options730122
53522Node: Score Options738669
53523Node: SH Options739518
53524Node: Solaris 2 Options758356
53525Node: SPARC Options759586
53526Node: SPU Options772844
53527Node: System V Options777783
53528Node: TILE-Gx Options778609
53529Node: TILEPro Options779533
53530Node: V850 Options780037
53531Node: VAX Options786745
53532Node: VMS Options787280
53533Node: VxWorks Options788093
53534Node: x86-64 Options789248
53535Node: Xstormy16 Options789466
53536Node: Xtensa Options789755
53537Node: zSeries Options794066
53538Node: Code Gen Options794262
53539Node: Environment Variables824057
53540Node: Precompiled Headers832060
53541Node: C Implementation838063
53542Node: Translation implementation839733
53543Node: Environment implementation840306
53544Node: Identifiers implementation840855
53545Node: Characters implementation841908
53546Node: Integers implementation844714
53547Node: Floating point implementation846538
53548Node: Arrays and pointers implementation849465
53549Ref: Arrays and pointers implementation-Footnote-1850901
53550Node: Hints implementation851027
53551Node: Structures unions enumerations and bit-fields implementation852491
53552Node: Qualifiers implementation854476
53553Node: Declarators implementation856248
53554Node: Statements implementation856589
53555Node: Preprocessing directives implementation856915
53556Node: Library functions implementation859019
53557Node: Architecture implementation859658
53558Node: Locale-specific behavior implementation860360
53559Node: C++ Implementation860665
53560Node: Conditionally-supported behavior861948
53561Node: Exception handling862457
53562Node: C Extensions862865
53563Node: Statement Exprs867855
53564Node: Local Labels872315
53565Node: Labels as Values875288
53566Ref: Labels as Values-Footnote-1877689
53567Node: Nested Functions877874
53568Node: Constructing Calls881832
53569Node: Typeof886549
53570Node: Conditionals889858
53571Node: __int128890747
53572Node: Long Long891272
53573Node: Complex892748
53574Node: Floating Types895336
53575Node: Half-Precision896464
53576Node: Decimal Float898649
53577Node: Hex Floats900505
53578Node: Fixed-Point901542
53579Node: Named Address Spaces904802
53580Ref: AVR Named Address Spaces905483
53581Node: Zero Length910691
53582Node: Empty Structures913978
53583Node: Variable Length914384
53584Node: Variadic Macros917060
53585Node: Escaped Newlines919438
53586Node: Subscripting920277
53587Node: Pointer Arith921002
53588Node: Initializers921570
53589Node: Compound Literals922066
53590Node: Designated Inits925427
53591Node: Case Ranges929059
53592Node: Cast to Union929740
53593Node: Mixed Declarations930830
53594Node: Function Attributes931340
53595Node: Attribute Syntax1017737
53596Node: Function Prototypes1028127
53597Node: C++ Comments1029907
53598Node: Dollar Signs1030426
53599Node: Character Escapes1030891
53600Node: Variable Attributes1031185
53601Ref: AVR Variable Attributes1044836
53602Ref: MeP Variable Attributes1047498
53603Ref: i386 Variable Attributes1049434
53604Node: Type Attributes1055095
53605Ref: MeP Type Attributes1068983
53606Ref: i386 Type Attributes1069257
53607Ref: PowerPC Type Attributes1069949
53608Ref: SPU Type Attributes1070811
53609Node: Alignment1071102
53610Node: Inline1072472
53611Node: Volatiles1077448
53612Node: Extended Asm1080329
53613Ref: Example of asm with clobbered asm reg1086233
53614Ref: Extended asm with goto1095941
53615Node: Constraints1103791
53616Node: Simple Constraints1104875
53617Node: Multi-Alternative1112185
53618Node: Modifiers1113902
53619Node: Machine Constraints1116915
53620Node: Asm Labels1167684
53621Node: Explicit Reg Vars1169360
53622Node: Global Reg Vars1170958
53623Node: Local Reg Vars1175454
53624Node: Alternate Keywords1177870
53625Node: Incomplete Enums1179356
53626Node: Function Names1180112
53627Node: Return Address1182273
53628Node: Vector Extensions1185780
53629Node: Offsetof1191963
53630Node: __sync Builtins1192768
53631Node: __atomic Builtins1198237
53632Node: x86 specific memory model extensions for transactional memory1209871
53633Node: Object Size Checking1211133
53634Node: Other Builtins1216622
53635Node: Target Builtins1245749
53636Node: Alpha Built-in Functions1246988
53637Node: ARM iWMMXt Built-in Functions1249997
53638Node: ARM NEON Intrinsics1256977
53639Node: AVR Built-in Functions1465406
53640Node: Blackfin Built-in Functions1468484
53641Node: FR-V Built-in Functions1469101
53642Node: Argument Types1469962
53643Node: Directly-mapped Integer Functions1471714
53644Node: Directly-mapped Media Functions1472796
53645Node: Raw read/write Functions1481000
53646Node: Other Built-in Functions1481906
53647Node: X86 Built-in Functions1483090
53648Node: X86 transactional memory intrinsics1542055
53649Node: MIPS DSP Built-in Functions1544728
53650Node: MIPS Paired-Single Support1557235
53651Node: MIPS Loongson Built-in Functions1558734
53652Node: Paired-Single Arithmetic1565249
53653Node: Paired-Single Built-in Functions1566197
53654Node: MIPS-3D Built-in Functions1568864
53655Node: Other MIPS Built-in Functions1574242
53656Node: picoChip Built-in Functions1574766
53657Node: PowerPC Built-in Functions1576114
53658Node: PowerPC AltiVec/VSX Built-in Functions1579927
53659Node: PowerPC Hardware Transactional Memory Built-in Functions1712825
53660Node: RX Built-in Functions1719366
53661Node: S/390 System z Built-in Functions1723399
53662Node: SH Built-in Functions1728628
53663Node: SPARC VIS Built-in Functions1730021
53664Node: SPU Built-in Functions1735624
53665Node: TI C6X Built-in Functions1737441
53666Node: TILE-Gx Built-in Functions1738466
53667Node: TILEPro Built-in Functions1739585
53668Node: Target Format Checks1740654
53669Node: Solaris Format Checks1741086
53670Node: Darwin Format Checks1741512
53671Node: Pragmas1742330
53672Node: ARM Pragmas1743040
53673Node: M32C Pragmas1743643
53674Node: MeP Pragmas1744715
53675Node: RS/6000 and PowerPC Pragmas1746783
53676Node: Darwin Pragmas1747524
53677Node: Solaris Pragmas1748591
53678Node: Symbol-Renaming Pragmas1749755
53679Node: Structure-Packing Pragmas1751311
53680Node: Weak Pragmas1752956
53681Node: Diagnostic Pragmas1753690
53682Node: Visibility Pragmas1756799
53683Node: Push/Pop Macro Pragmas1757551
53684Node: Function Specific Option Pragmas1758524
53685Node: Unnamed Fields1760784
53686Node: Thread-Local1763011
53687Node: C99 Thread-Local Edits1765116
53688Node: C++98 Thread-Local Edits1767114
53689Node: Binary constants1770559
53690Node: C++ Extensions1771230
53691Node: C++ Volatiles1772941
53692Node: Restricted Pointers1775289
53693Node: Vague Linkage1776880
53694Node: C++ Interface1780503
53695Ref: C++ Interface-Footnote-11784791
53696Node: Template Instantiation1784929
53697Node: Bound member functions1791515
53698Node: C++ Attributes1793047
53699Node: Function Multiversioning1795703
53700Node: Namespace Association1797520
53701Node: Type Traits1798900
53702Node: Java Exceptions1805383
53703Node: Deprecated Features1806773
53704Node: Backwards Compatibility1809740
53705Node: Objective-C1811087
53706Node: GNU Objective-C runtime API1811694
53707Node: Modern GNU Objective-C runtime API1812701
53708Node: Traditional GNU Objective-C runtime API1815137
53709Node: Executing code before main1815864
53710Node: What you can and what you cannot do in +load1818604
53711Node: Type encoding1820992
53712Node: Legacy type encoding1826019
53713Node: @encode1827109
53714Node: Method signatures1827650
53715Node: Garbage Collection1829642
53716Node: Constant string objects1832332
53717Node: compatibility_alias1834841
53718Node: Exceptions1835562
53719Node: Synchronization1838272
53720Node: Fast enumeration1839456
53721Node: Using fast enumeration1839768
53722Node: c99-like fast enumeration syntax1840979
53723Node: Fast enumeration details1841682
53724Node: Fast enumeration protocol1844022
53725Node: Messaging with the GNU Objective-C runtime1847174
53726Node: Dynamically registering methods1848546
53727Node: Forwarding hook1850237
53728Node: Compatibility1853277
53729Node: Gcov1859833
53730Node: Gcov Intro1860366
53731Node: Invoking Gcov1863084
53732Node: Gcov and Optimization1875986
53733Node: Gcov Data Files1878988
53734Node: Cross-profiling1880383
53735Node: Trouble1882237
53736Node: Actual Bugs1883649
53737Node: Interoperation1884096
53738Node: Incompatibilities1890987
53739Node: Fixed Headers1899139
53740Node: Standard Libraries1900797
53741Node: Disappointments1902169
53742Node: C++ Misunderstandings1906528
53743Node: Static Definitions1907339
53744Node: Name lookup1908392
53745Ref: Name lookup-Footnote-11913172
53746Node: Temporaries1913361
53747Node: Copy Assignment1915337
53748Node: Non-bugs1917144
53749Node: Warnings and Errors1927650
53750Node: Bugs1929412
53751Node: Bug Criteria1929976
53752Node: Bug Reporting1932186
53753Node: Service1932407
53754Node: Contributing1933226
53755Node: Funding1933966
53756Node: GNU Project1936456
53757Node: Copying1937102
53758Node: GNU Free Documentation License1974611
53759Node: Contributors1999729
53760Node: Option Index2037127
53761Node: Keyword Index2231663
53762
53763End Tag Table
53764